

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

# 创建和管理集群
<a name="creating-and-managing-clusters"></a>

本主题介绍如何使用 Eksctl 创建和删除 EKS 集群。您可以使用 CLI 命令创建集群，也可以通过创建集群配置 YAML 文件来创建集群。

## 创建简单集群
<a name="_creating_a_simple_cluster"></a>

使用以下命令创建一个简单的集群：

```
eksctl create cluster
```

这将在您的默认区域（由您的 AWS CLI 配置指定）中创建一个 EKS 集群，其中一个托管节点组包含两个 m5.large 节点。

现在，当不使用配置文件时，eksctl 会默认创建托管节点组。要创建自我管理的节点组，请传递`--managed=false`到或。`eksctl create cluster` `eksctl create nodegroup`

### 注意事项
<a name="_considerations"></a>
+ 在中创建集群时`us-east-1`，您可能会遇到`UnsupportedAvailabilityZoneException`。如果发生这种情况，请复制建议的区域并传递`--zones`标志，例如：`eksctl create cluster --region=us-east-1 --zones=us-east-1a,us-east-1b,us-east-1d`。此问题可能发生在其他地区，但不太常见。在大多数情况下，您不需要使用标`--zone`志。

## 使用配置文件创建集群
<a name="_create_cluster_using_config_file"></a>

您可以使用配置文件而不是标志来创建集群。

首先，创建`cluster.yaml`文件：

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: basic-cluster
  region: eu-north-1

nodeGroups:
  - name: ng-1
    instanceType: m5.large
    desiredCapacity: 10
    volumeSize: 80
    ssh:
      allow: true # will use ~/.ssh/id_rsa.pub as the default ssh key
  - name: ng-2
    instanceType: m5.xlarge
    desiredCapacity: 2
    volumeSize: 100
    ssh:
      publicKeyPath: ~/.ssh/ec2_id_rsa.pub
```

接下来，运行以下命令：

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

这将按所述创建集群。

如果您需要使用现有 VPC，则可以使用如下配置文件：

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: cluster-in-existing-vpc
  region: eu-north-1

vpc:
  subnets:
    private:
      eu-north-1a: { id: subnet-0ff156e0c4a6d300c }
      eu-north-1b: { id: subnet-0549cdab573695c03 }
      eu-north-1c: { id: subnet-0426fb4a607393184 }

nodeGroups:
  - name: ng-1-workers
    labels: { role: workers }
    instanceType: m5.xlarge
    desiredCapacity: 10
    privateNetworking: true
  - name: ng-2-builders
    labels: { role: builders }
    instanceType: m5.2xlarge
    desiredCapacity: 2
    privateNetworking: true
    iam:
      withAddonPolicies:
        imageBuilder: true
```

集群名称或节点组名称必须仅包含字母数字字符（区分大小写）和连字符。它必须以字母字符开头且不能超过 128 个字符，否则您将收到验证错误。有关更多信息，请参阅 AWS CLoudFormation 用户指南[中的通过 CloudFormation 控制台创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-parameters.html)。

## 为新集群更新 kubeconfig
<a name="_update_kubeconfig_for_new_cluster"></a>

创建集群后，相应的 kubernetes 配置将添加到您的 kubeconfig 文件中。这是您在环境变量中`KUBECONFIG`或`~/.kube/config`默认配置的文件。使用该标志可以覆盖 kubeconfig 文件的路径。`--kubeconfig`

其他可以改变 kubeconfig 文件写入方式的标志：


| 标记 | 类型 | 使用 | 默认值 | 
| --- | --- | --- | --- | 
| --kubeconfig | 字符串 | 写入 kubeconfig 的路径（与--auto-kubeconfig 不兼容） | $KUBECONFIG 或 \~/。 kube/config | 
| --set-kubeconfig-context | 布尔 | 如果为 true 则将在 kubeconfig 中设置当前上下文；如果已经设置了上下文，则它将被覆盖 | true | 
| --auto-kubeconfig | 布尔 | 按集群名称保存 kubeconfig 文件 | true | 
| --write-kubeconfig | 布尔 | 切换 kubeconfig 的写入 | true | 

## 删除集群
<a name="_delete_cluster"></a>

要删除此集群，请运行：

```
eksctl delete cluster -f cluster.yaml
```

**警告**  
在删除操作中使用该`--wait`标志，以确保正确报告删除错误。

如果没有该`--wait`标志，eksctl 只会向集群的 CloudFormation 堆栈发出删除操作，而不会等待其删除。在某些情况下，使用集群或其 VPC 的 AWS 资源可能会导致集群删除失败。如果删除失败或者忘记了等待标志，则可能需要转到 CloudFormation GUI 并从那里删除 eks 堆栈。

**警告**  
PDB 策略可能会阻止在集群删除期间移除节点。

删除带有节点组的集群时，Pod 中断预算 (PDB) 策略可能会阻止成功删除节点。例如，`aws-ebs-csi-driver`安装了的集群通常有两个 pod，它们的 PDB 策略允许一次只能有一个 pod 不可用，这使得另一个 Pod 在删除期间无法被驱逐。要在这些情况下成功删除集群，请使用该`disable-nodegroup-eviction`标志绕过 PDB 策略检查：

```
eksctl delete cluster -f cluster.yaml --disable-nodegroup-eviction
```

有关更多示例配置文件，请参阅 eksc GitHub tl 存储库中的[https://github.com/eksctl-io/eksctl/tree/master/examples](https://github.com/eksctl-io/eksctl/tree/master/examples)目录。

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

dry-run 功能允许生成一个跳过集群创建的 ClusterConfig 文件，并输出一个表示所提供的 CLI 选项并包含 eksctl 设置的默认值的 ClusterConfig 文件。

更多信息可以在 D [ry Run](dry-run.md) 页面上找到。