

 **協助改進此頁面** 

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

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

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

# EKS Auto 模式的靜態容量節點集區
<a name="auto-static-capacity"></a>

Amazon EKS Auto Mode 支援靜態容量節點集區，無論 Pod 需求為何，都能維持固定數量的節點。靜態容量節點集區適用於需要可預測容量、預留執行個體或特定合規需求的工作負載，而您需要維持一致的基礎設施使用量。

與根據 Pod 排程需求擴展的動態節點集區不同，靜態容量節點集區會維持您已設定的節點數量。

## 設定靜態容量節點集區
<a name="_configure_a_static_capacity_node_pool"></a>

若要建立靜態容量節點集區，請在 NodePool 規格中設定 `replicas` 欄位。`replicas` 欄位定義節點集區將維護的確切節點數量。如需如何設定 [範例](#static-capacity-examples)，請參閱 `replicas`。

## 靜態容量節點集區考量事項
<a name="_static_capacity_node_pool_considerations"></a>

靜態容量節點集區有幾項重要的限制條件和行為：

 **組態限制：**
+  **無法切換模式**：在節點集區`replicas`上設定後，就無法將其移除。節點集區無法在靜態和動態模式之間切換。
+  **資源限制**：限制區段僅支援 `limits.nodes` 欄位。CPU 和記憶體限制不適用。
+  **無權重欄位**：由於節點選擇不是根據優先順序，因此無法在靜態容量節點集區上設定 `weight` 欄位。

 **操作行為：**
+  **無合併**：靜態容量集區中的節點不會考慮合併。
+  **擴展操作**：擴展操作會略過節點中斷預算，但仍遵守 PodDisruptionBudgets。
+  **節點替換**：節點仍會根據您的組態替換成偏離 （例如 AMI 更新） 和過期。

## 最佳實務
<a name="_best_practices"></a>

 **容量規劃：**
+ 設定`limits.nodes`高於 `replicas` 以允許在節點取代操作期間暫時擴展。
+ 設定限制時，請考慮節點偏離或 AMI 更新期間所需的最大容量。

 **執行個體選擇：**
+ 當您有預留執行個體或特定硬體需求時，請使用特定執行個體類型。
+ 避免在擴展期間限制執行個體可用性的過度限制需求。

 **中斷管理：**
+ 設定適當的中斷預算，以平衡可用性與維護操作。
+ 設定預算百分比時，請考慮您應用程式的節點替換公差。

 **監控：**
+ 定期監控 `status.nodes` 欄位，以確保維持所需的容量。
+ 設定實際節點計數偏離所需複本時的提醒。

 **區域分佈：**
+ 為了實現高可用性，請將靜態容量分散到多個可用區域。
+ 當您建立跨越多個可用區域的靜態容量節點集區時，EKS Auto Mode 會將節點分散到指定區域，但不保證分佈均勻。
+ 若要跨可用區域進行可預測且均勻的分佈，請建立個別的靜態容量節點集區，每個集區都會使用 `topology.kubernetes.io/zone`需求固定到特定的可用區域。
+ 如果您需要將 12 個節點平均分散到三個區域，請建立三個節點集區，每個節點集區各有 4 個複本，而不是一個節點集區，在三個區域各有 12 個複本。

## 擴展靜態容量節點集區
<a name="_scale_a_static_capacity_node_pool"></a>

您可以使用 `kubectl scale`命令變更靜態容量節點集區中的複本數量：

```
# Scale down to 5 nodes
kubectl scale nodepool static-nodepool --replicas=5
```

縮減規模時，EKS Auto Mode 會正常終止節點，遵守 PodDisruptionBudgets，並允許將執行中的 Pod 重新排程到剩餘的節點。

## 監控靜態容量節點集區
<a name="_monitor_static_capacity_node_pools"></a>

使用下列命令來監控靜態容量節點集區：

```
# View node pool status
kubectl get nodepool static-nodepool

# Get detailed information including current node count
kubectl describe nodepool static-nodepool

# Check the current number of nodes
kubectl get nodepool static-nodepool -o jsonpath='{.status.nodes}'
```

`status.nodes` 欄位顯示節點集區管理的目前節點數量，在正常情況下應符合您所需的`replicas`計數。

## 疑難排解
<a name="_troubleshooting"></a>

 **未到達所需複本的節點：**
+ 檢查`limits.nodes`值是否足夠
+ 確認您的需求不會過度限制執行個體選取
+ 檢閱您正在使用的執行個體類型和區域的 AWS 服務配額

 **節點替換耗時太長：**
+ 調整中斷預算以允許更多並行取代
+ 檢查 PodDisruptionBudgets 是否阻止節點終止

 **非預期的節點終止：**
+ 檢閱 `expireAfter`和 `terminationGracePeriod`設定
+ 檢查手動節點終止或 AWS 維護事件

## 範例
<a name="static-capacity-examples"></a>

### 基本靜態容量節點集區
<a name="_basic_static_capacity_node_pool"></a>

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: basic-static
spec:
  replicas: 5

  template:
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default

      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["m"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-west-2a"]

  limits:
    nodes: 8  # Allow scaling up to 8 during operations
```

### 具有特定執行個體類型的靜態容量
<a name="_static_capacity_with_specific_instance_types"></a>

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: reserved-instances
spec:
  replicas: 20

  template:
    metadata:
      labels:
        instance-type: reserved
        cost-center: production
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default

      requirements:
        - key: "node.kubernetes.io/instance-type"
          operator: In
          values: ["m5.2xlarge"]  # Specific instance type
        - key: "karpenter.sh/capacity-type"
          operator: In
          values: ["on-demand"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-west-2a", "us-west-2b", "us-west-2c"]

  limits:
    nodes: 25

  disruption:
    # Conservative disruption for production workloads
    budgets:
      - nodes: 10%
```

### 多區域靜態容量節點集區
<a name="_multi_zone_static_capacity_node_pool"></a>

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: multi-zone-static
spec:
  replicas: 12  # Will be distributed across specified zones

  template:
    metadata:
      labels:
        availability: high
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default

      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m"]
        - key: "eks.amazonaws.com/instance-cpu"
          operator: In
          values: ["8", "16"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-west-2a", "us-west-2b", "us-west-2c"]
        - key: "karpenter.sh/capacity-type"
          operator: In
          values: ["on-demand"]

  limits:
    nodes: 15

  disruption:
    budgets:
      - nodes: 25%
```

### 具有容量保留的靜態容量
<a name="_static_capacity_with_capacity_reservation"></a>

下列範例示範如何搭配 EC2 容量保留使用靜態容量節點集區。如需搭配 EKS Auto 模式使用 EC2 容量預留的詳細資訊，請參閱 [使用 EKS 自動模式控制工作負載部署至容量保留](auto-odcr.md)。

 `NodeClass` 定義 `capacityReservationSelectorTerms` 

```
apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: capacity-reservation-nodeclass
spec:
  role: AmazonEKSNodeRole
  securityGroupSelectorTerms:
  - id: sg-0123456789abcdef0
  subnetSelectorTerms:
  - id: subnet-0123456789abcdef0
  capacityReservationSelectorTerms:
  - id: cr-0123456789abcdef0
```

 `NodePool` 使用 參考上述 `NodeClass`和 `karpenter.sh/capacity-type: reserved`。

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: static-capacity-reservation-nodepool
spec:
  replicas: 5
  limits:
    nodes: 8  # Allow scaling up to 8 during operations
  template:
    metadata: {}
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: capacity-reservation-nodeclass
      requirements:
      - key: karpenter.sh/capacity-type
        operator: In
        values: ['reserved']
```