

 **協助改進此頁面** 

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

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

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

# 將 EKS Auto Mode 節點部署至 Local Zones
<a name="auto-local-zone"></a>

EKS Auto Mode 透過自動節點佈建提供簡化的叢集管理。 AWS 本機區域可將 AWS 基礎設施擴展到更接近最終使用者的地理位置，從而減少延遲敏感應用程式的延遲。本指南會逐步解說將 EKS Auto Mode 節點部署至 AWS Local Zones 的程序，讓您針對特定地理區域的使用者執行具有較低延遲的容器化應用程式。

本指南也示範如何使用 Kubernetes 污點和容錯，以確保只有特定工作負載會在 Local Zone 節點上執行，協助您控制成本並最佳化資源用量。

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

開始將 EKS Auto Mode 節點部署到 Local Zones 之前，請確定您已備妥下列先決條件：
+  [現有的 EKS 自動模式叢集](create-auto.md) 
+  [選擇加入您 AWS 帳戶中的本機區域](https://docs.aws.amazon.com/local-zones/latest/ug/getting-started.html#getting-started-find-local-zone) 

## 步驟 1：建立本機區域子網路
<a name="_step_1_create_local_zone_subnet"></a>

將 EKS Auto Mode 節點部署到 Local Zone 的第一步是在該 Local Zone 中建立子網路。此子網路為您的節點提供網路基礎設施，並允許它們與您的其餘 VPC 通訊。遵循[建立本機區域子網路](https://docs.aws.amazon.com/local-zones/latest/ug/getting-started.html#getting-started-create-local-zone-subnet)指示 （在 AWS 本機區域使用者指南中），在您選擇的本機區域中建立子網路。

**提示**  
請記下本機區域子網路的名稱。

## 步驟 2：為本機區域子網路建立 NodeClass
<a name="_step_2_create_nodeclass_for_local_zone_subnet"></a>

建立本機區域子網路之後，您需要定義參考此子網路的 NodeClass。NodeClass 是一種 Kubernetes 自訂資源，可指定節點的基礎設施屬性，包括要使用的子網路、安全群組和儲存組態。在下面的範例中，我們建立名為 "local-zone" 的 NodeClass，根據其名稱以本機區域子網路為目標。您也可以使用子網路 ID。您需要調整此組態以鎖定您的 Local Zone 子網路。

如需詳細資訊，請參閱[建立 Amazon EKS 的節點類別](create-node-class.md)。

```
apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: local-zone
spec:
  subnetSelectorTerms:
    - id: <local-subnet-id>
```

## 步驟 3：使用 NodeClass 和 Taint 建立 NodePool
<a name="_step_3_create_nodepool_with_nodeclass_and_taint"></a>

設定 NodeClass 後，您現在需要建立使用此 NodeClass 的 NodePool。NodePool 會定義節點的運算特性，包括執行個體類型。NodePool 使用 NodeClass 做為參考，以判斷在何處啟動執行個體。

在以下範例中，我們會建立參考 "local-zone" NodeClass 的 NodePool。我們也會將污點新增至節點，以確保只有具有相符公差的 Pod 才能排程在這些 Local Zone 節點上。這對 Local Zone 節點特別重要，這通常具有較高的成本，並且只能由特別受益於降低延遲的工作負載使用。

如需詳細資訊，請參閱[為 EKS 自動模式建立節點集區](create-node-pool.md)。

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: my-node-pool
spec:
  template:
    metadata:
      labels:
        node-type: local-zone
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: local-zone
      taints:
        - key: "aws.amazon.com/local-zone"
          value: "true"
          effect: NoSchedule

      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m", "r"]
        - key: "eks.amazonaws.com/instance-cpu"
          operator: In
          values: ["4", "8", "16", "32"]
```

具有金鑰`aws.amazon.com/local-zone`和效果的污點`NoSchedule`可確保在這些節點上不會排程沒有相符公差的 Pod。這可防止定期工作負載意外在 Local Zone 中執行，這可能會導致意外的成本。

## 步驟 4：部署具有公差和節點親和性的工作負載
<a name="_step_4_deploy_workloads_with_toleration_and_node_affinity"></a>

若要最佳控制本機區域節點上的工作負載置放，請同時使用污點/容錯和節點親和性。此合併方法提供下列優點：

1.  **成本控制**：污點可確保只有具有明確公差的 Pod 可以使用可能昂貴的 Local Zone 資源。

1.  **保證配置**：節點親和性可確保對延遲敏感的應用程式僅在本機區域執行，而不是在一般叢集節點上執行。

以下是設定為在 Local Zone 節點上特別執行的部署範例：

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: low-latency-app
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: low-latency-app
  template:
    metadata:
      labels:
        app: low-latency-app
    spec:
      tolerations:
      - key: "aws.amazon.com/local-zone"
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "node-type"
                operator: "In"
                values: ["local-zone"]
      containers:
      - name: application
        image: my-low-latency-app:latest
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"
          requests:
            cpu: "500m"
            memory: "512Mi"
```

此部署有兩個金鑰排程組態：

1. **容錯允許**在具有`aws.amazon.com/local-zone`污點的節點上排程 Pod。

1. **節點親和性**要求可確保這些 Pod 只會在標籤為 的節點上執行`node-type: local-zone`。

這些共同確保您的延遲敏感應用程式僅在 Local Zone 節點上執行，且一般應用程式不會使用 Local Zone 資源，除非明確設定這樣做。

## 步驟 5：使用 AWS 主控台驗證
<a name="step_5_verify_with_shared_aws_console"></a>

設定 NodeClass、NodePool 和 部署之後，您應該驗證節點是否如預期佈建在 Local Zone，以及工作負載是否在其上執行。您可以使用 AWS 管理主控台來驗證 EC2 執行個體是否在正確的本機區域子網路中啟動。

此外，您可以使用 檢查 Kubernetes 節點清單`kubectl get nodes -o wide`，以確認節點使用正確的標籤和污點來加入您的叢集：

```
kubectl get nodes -o wide
kubectl describe node <node-name> | grep -A 5 Taints
```

您也可以確認您的工作負載 Pod 已排程在 Local Zone 節點上：

```
kubectl get pods -o wide
```

此方法可確保只會在這些節點上排定特別容忍 Local Zone 污點的工作負載，協助您控制成本並最有效地使用 Local Zone 資源。