

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 執行個體選取器
<a name="instance-selector"></a>

eksctl 支援為受管和自我管理節點群組指定多個執行個體類型，但使用超過 270 種 EC2 執行個體類型，使用者必須花時間找出最適合其節點群組的執行個體類型。使用 Spot 執行個體時更加困難，因為您需要選擇一組可與 Cluster Autoscaler 搭配使用的執行個體。

eksctl 現在與 [EC2 執行個體選取器](https://github.com/aws/amazon-ec2-instance-selector)整合，可根據資源條件產生執行個體類型的清單來解決此問題：vCPUs、記憶體、GPUs 數量和 CPU 架構。當執行個體選取器條件通過時，eksctl 會建立節點群組，並將執行個體類型設定為符合所提供條件的執行個體類型。

## 建立叢集和節點群組
<a name="_create_cluster_and_nodegroups"></a>

若要使用與傳遞給 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` 欄位，否則 的任何變更`instanceTypes`都會被 eksctl 覆寫。

使用 傳遞 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
# ...
```