

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 实例选择器
<a name="instance-selector"></a>

eksctl 支持为托管和自我管理的节点组指定多个实例类型，但是对于超过 270 个 EC2 实例类型，用户必须花时间弄清楚哪些实例类型最适合他们的节点组。使用竞价型实例就更难了，因为您需要选择一组与集群 Autoscaler 配合良好的实例。

eksctl 现在与 [ EC2 实例选择器集成](https://github.com/aws/amazon-ec2-instance-selector)，该选择器通过根据资源标准生成实例类型列表来解决此问题：vCPU、内存、GPU 数量和 CPU 架构。传递实例选择器条件时，eksctl 会创建一个节点组，将实例类型设置为与提供的条件相匹配的实例类型。

## 创建集群和节点组
<a name="_create_cluster_and_nodegroups"></a>

要使用传递给 eksctl 的实例选择器资源条件匹配的实例类型，使用与传递给 eksctl 的实例选择器资源条件匹配的单个节点组创建集群，请运行

```
eksctl create cluster --instance-selector-vcpus=2 --instance-selector-memory=4
```

这将创建一个集群和一个托管节点组，并将`instanceTypes`字段设置为`[c5.large, c5a.large, c5ad.large, c5d.large, t2.medium, t3.medium, t3a.medium]`（返回的实例类型集可能会更改）。

对于非托管节点组，将设置该`instancesDistribution.instanceTypes`字段：

```
eksctl create cluster --managed=false --instance-selector-vcpus=2 --instance-selector-memory=4
```

实例选择器标准也可以在以下位置指定 ClusterConfig：

```
# instance-selector-cluster.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: cluster
  region: us-west-2

nodeGroups:
- name: ng
  instanceSelector:
    vCPUs: 2
    memory: "4" # 4 GiB, unit defaults to GiB

managedNodeGroups:
- name: mng
  instanceSelector:
    vCPUs: 2
    memory: 2GiB #
    cpuArchitecture: x86_64 # default value
```

```
eksctl create cluster -f instance-selector-cluster.yaml
```

`eksctl create cluster`和支持以下实例选择器 CLI 选项`eksctl create nodegroup`：

 `--instance-selector-vcpus`、`--instance-selector-memory`、`--instance-selector-gpus` 和 `instance-selector-cpu-architecture` 

示例文件可以[在这里找到](https://github.com/eksctl-io/eksctl/blob/main/examples/28-instance-selector.yaml)。

### 试跑
<a name="_dry_run"></a>

[试运行](dry-run.md)功能允许您在继续创建节点组之前检查和更改实例选择器匹配的实例。

```
eksctl create cluster --name development --instance-selector-vcpus=2 --instance-selector-memory=4 --dry-run

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
# ...
managedNodeGroups:
- amiFamily: AmazonLinux2
  instanceSelector:
    memory: "4"
    vCPUs: 2
  instanceTypes:
  - c5.large
  - c5a.large
  - c5ad.large
  - c5d.large
  - t2.medium
  - t3.medium
  - t3a.medium
...
# other config
```

然后 ClusterConfig 可以将生成的内容传递给`eksctl create cluster`：

```
eksctl create cluster -f generated-cluster.yaml
```

代表 CLI 选项的`instanceSelector`字段也将添加到 ClusterConfig 文件中，以供查看和记录之用。省略`--dry-run`时，该字段将被忽略并使用该`instanceTypes`字段，否则对的任何更改都将被 ek `instanceTypes` sctl 覆盖。

传递 ClusterConfig 文件时`--dry-run`，eksctl 将在扩展每个节点组的实例选择器资源条件后输出一个包含相同节点组集的 ClusterConfig 文件。

```
# instance-selector-cluster.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: cluster
  region: us-west-2

nodeGroups:
- name: ng
  instanceSelector:
    vCPUs: 2
    memory: 4 # 4 GiB, unit defaults to GiB

managedNodeGroups:
- name: mng
  instanceSelector:
    vCPUs: 2
    memory: 2GiB #
    cpuArchitecture: x86_64 # default value
```

```
eksctl create cluster -f instance-selector-cluster.yaml --dry-run

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
# ...
managedNodeGroups:
- amiFamily: AmazonLinux2
  # ...
  instanceSelector:
    cpuArchitecture: x86_64
    memory: 2GiB
    vCPUs: 2
  instanceTypes:
  - t3.small
  - t3a.small
nodeGroups:
- amiFamily: AmazonLinux2
  # ...
  instanceSelector:
    memory: "4"
    vCPUs: 2
  instanceType: mixed
  instancesDistribution:
    capacityRebalance: false
    instanceTypes:
    - c5.large
    - c5a.large
    - c5ad.large
    - c5d.large
    - t2.medium
    - t3.medium
    - t3a.medium
# ...
```