

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

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

本主題說明如何使用 Eksctl 建立和刪除 EKS 叢集。您可以使用 CLI 命令或透過建立叢集組態 YAML 檔案來建立叢集。

## 建立簡單的叢集
<a name="_creating_a_simple_cluster"></a>

使用下列命令建立簡單的叢集：

```
eksctl create cluster
```

這將在預設區域中建立 EKS 叢集 （如您的 AWS CLI 組態所指定），其中包含一個包含兩個 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)。 CLoudFormation 

## 更新新叢集的 kubeconfig
<a name="_update_kubeconfig_for_new_cluster"></a>

建立叢集之後，適當的 kubernetes 組態會新增至您的 kubeconfig 檔案。這是您在環境變數中設定的 檔案，`KUBECONFIG`或`~/.kube/config`預設為 。您可以使用 `--kubeconfig`旗標覆寫 kubeconfig 檔案的路徑。

可變更 kubeconfig 檔案寫入方式的其他旗標：


| 標記 | type | use | 預設值 | 
| --- | --- | --- | --- | 
| --kubeconfig | string | 寫入 kubeconfig 的路徑 （與 --auto-kubeconfig 不相容） | $KUBECONFIG 或 \~/.kube/config | 
| --set-kubeconfig-context | bool | 如果為 true，則會在 kubeconfig 中設定目前內容；如果已設定內容，則會覆寫 | true | 
| --auto-kubeconfig | bool | 依叢集名稱儲存 kubeconfig 檔案 | true | 
| --write-kubeconfig | bool | 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`已安裝 的叢集通常有兩個具有 PDB 政策的 Pod，一次只允許一個 Pod 無法使用，使得另一個 Pod 在刪除期間無法清除。若要在這些案例中成功刪除叢集，請使用 `disable-nodegroup-eviction`旗標略過 PDB 政策檢查：

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

如需更多範例組態檔案，請參閱 eksctl GitHub 儲存庫中的 [https://github.com/eksctl-io/eksctl/tree/master/examples](https://github.com/eksctl-io/eksctl/tree/master/examples)目錄。

## 乾執行
<a name="_dry_run"></a>

試轉功能可產生 ClusterConfig 檔案，略過叢集建立並輸出代表所提供 CLI 選項的 ClusterConfig 檔案，並包含 eksctl 設定的預設值。

如需詳細資訊，請參閱 [Dry Run](dry-run.md) 頁面。