

 **協助改進此頁面** 

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

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

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

# 使用 kubectl 從 Karpenter 移轉至 EKS 自動模式
<a name="auto-migrate-karpenter"></a>

本主題將逐步引導您使用 kubectl 將工作負載從 Karpenter 移轉至 Amazon EKS 自動模式。移轉可以逐步進行，讓您能夠按照自己的步調移動工作負載，同時在整個轉換期間保持叢集穩定性和應用程式可用性。

下面概述的逐步方法使您能夠在移轉期間同時執行 Karpenter 和 EKS 自動模式。這種雙重操作策略有助於確保平穩轉換，讓您可以在完全停用 Karpenter 之前，驗證工作負載在 EKS 自動模式上的行為。您可以單獨或分組移轉應用程式，提供靈活性以適應您的特定運營要求與風險承受能力。

## 先決條件
<a name="_prerequisites"></a>

開始移轉之前，請確保您已具備下列項目：
+ 在叢集上安裝了 Karpenter v1.1 或以上版本。如需詳細資訊，請參閱 Karpenter 文件中的[升級至版本 1.1.0 及以上](https://karpenter.sh/docs/upgrading/upgrade-guide/#upgrading-to-110)。
+  已安裝並將 `kubectl` 連接到您的叢集。如需詳細資訊，請參閱[設定以使用 Amazon EKS](setting-up.md)。

本主題假設您熟悉 Karpenter 及 NodePools。如需詳細資訊，請參閱 [Karpenter](https://karpenter.sh/) 文件。

## 步驟 1：在叢集上啟用 EKS 自動模式
<a name="_step_1_enable_eks_auto_mode_on_the_cluster"></a>

使用 CLI 或 管理主控台在現有叢集上啟用 AWS EKS 自動模式。如需詳細資訊，請參閱[在現有叢集上啟用 EKS 自動模式](auto-enable-existing.md)。

**注意**  
啟用 EKS 自動模式時，切勿在轉換期間的此階段啟用 `general purpose` nodepool。此節點集區不具選擇性。  
如需詳細資訊，請參閱[啟用或停用內建的 NodePool](set-builtin-node-pools.md)。

## 步驟 2：建立帶有污點的 EKS 自動模式 NodePool
<a name="_step_2_create_a_tainted_eks_auto_mode_nodepool"></a>

為 EKS 自動模式建立帶有污點的新 NodePool。這確保了現有的 Pod 不會自動排程到新的 EKS 自動模式節點上。此節點集區使用 EKS 自動模式內建的 `default` `NodeClass`。如需詳細資訊，請參閱[建立 Amazon EKS 的節點類別](create-node-class.md)。

帶有污點的節點集區範例：

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: eks-auto-mode
spec:
  template:
    spec:
      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m", "r"]
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
      taints:
        - key: "eks-auto-mode"
          effect: "NoSchedule"
```

更新節點集區的需求，以符合您要從中移轉的 Karpenter 組態。您至少需要一個需求。

## 步驟 3：更新工作負載以進行移轉
<a name="_step_3_update_workloads_for_migration"></a>

識別並更新您想要移轉至 EKS 自動模式的工作負載。向這些工作負載新增容差和節點選取器：

```
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      tolerations:
      - key: "eks-auto-mode"
        effect: "NoSchedule"
      nodeSelector:
        eks.amazonaws.com/compute-type: auto
```

此變更可讓工作負載排程至新的 EKS 自動模式節點。

EKS 自動模式使用與 Karpenter 不同的標籤。與 EC2 受管執行個體相關的標籤以 `eks.amazonaws.com` 開頭。如需詳細資訊，請參閱[為 EKS 自動模式建立節點集區](create-node-pool.md)。

## 步驟 4：逐步移轉工作負載
<a name="_step_4_gradually_migrate_workloads"></a>

針對要移轉的每個工作負載重複步驟 3。這使您可根據需求和風險承受能力，單獨或分組移動工作負載。

## 步驟 5：移除原始 Karpenter NodePool
<a name="_step_5_remove_the_original_karpenter_nodepool"></a>

所有工作負載移轉完成後，即可移除原始的 Karpenter NodePool：

```
kubectl delete nodepool <original-nodepool-name>
```

## 步驟 6：從 EKS 自動模式 NodePool 移除污點 (選用)
<a name="_step_6_remove_taint_from_eks_auto_mode_nodepool_optional"></a>

如果您希望 EKS 自動模式成為新工作負載的預設值，可以從 EKS 自動模式 NodePool 中移除污點：

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: eks-auto-mode
spec:
  template:
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
      # Remove the taints section
```

## 步驟 7：從工作負載移除節點選取器 (選用)
<a name="_step_7_remove_node_selectors_from_workloads_optional"></a>

如果您已從 EKS 自動模式 NodePool 移除污點，可以選擇從工作負載移除節點選取器，因為 EKS 自動模式現在是預設值：

```
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      # Remove the nodeSelector section
      tolerations:
      - key: "eks-auto-mode"
        effect: "NoSchedule"
```

## 步驟 8：從叢集解除安裝 Karpenter
<a name="_step_8_uninstall_karpenter_from_your_cluster"></a>

移除 Karpenter 的步驟取決於您的安裝方式。如需詳細資訊，請參閱 [Karpenter 安裝說明](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/#create-a-cluster-and-add-karpenter)。