協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EKS Auto 模式的靜態容量節點集區
Amazon EKS Auto Mode 支援靜態容量節點集區,無論 Pod 需求為何,都能維持固定數量的節點。靜態容量節點集區適用於需要可預測容量、預留執行個體或特定合規需求的工作負載,而您需要維持一致的基礎設施使用量。
與根據 Pod 排程需求擴展的動態節點集區不同,靜態容量節點集區會維持您已設定的節點數量。
基本範例
以下是維護 5 個節點的簡單靜態容量節點集區:
apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: my-static-nodepool spec: replicas: 5 # Maintain exactly 5 nodes template: spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: default requirements: - key: "eks.amazonaws.com/instance-category" operator: In values: ["m", "c"] - key: "topology.kubernetes.io/zone" operator: In values: ["us-west-2a", "us-west-2b"] limits: nodes: 8
設定靜態容量節點集區
若要建立靜態容量節點集區,請在 NodePool 規格中設定 replicas 欄位。replicas 欄位定義節點集區將維護的確切節點數量。
靜態容量節點集區限制
靜態容量節點集區有幾個重要的限制條件和行為:
組態限制條件:
-
無法切換模式:在節點集區
replicas上設定後,就無法將其移除。節點集區無法在靜態和動態模式之間切換。 -
資源限制:限制區段僅支援
limits.nodes欄位。CPU 和記憶體限制不適用。 -
無權重欄位:無法在靜態容量節點集區上設定
weight欄位,因為節點選取不是根據優先順序。
操作行為:
-
無合併:靜態容量集區中的節點不會根據使用率考慮進行合併。
-
擴展操作:擴展操作會略過節點中斷預算,但仍遵守 PodDisruptionBudgets。
-
節點取代:仍會根據您的組態,將節點取代為偏離 (例如 AMI 更新) 和過期。
擴展靜態容量節點集區
您可以使用 kubectl scale命令變更靜態容量節點集區中的複本數量:
# Scale down to 5 nodes kubectl scale nodepool static-nodepool --replicas=5
縮減規模時,EKS Auto Mode 會正常終止節點,遵守 PodDisruptionBudgets,並允許將執行中的 Pod 重新排程到剩餘的節點。
監控靜態容量節點集區
使用下列命令來監控靜態容量節點集區:
# 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計數。
範例組態
基本靜態容量節點集區
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
具有特定執行個體類型的靜態容量
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%
多區域靜態容量節點集區
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%
最佳實務
容量規劃:
-
設定
limits.nodes高於replicas以允許在節點取代操作期間暫時擴展。 -
設定限制時,請考慮節點偏離或 AMI 更新期間所需的最大容量。
執行個體選擇:
-
當您有預留執行個體或特定硬體需求時,請使用特定執行個體類型。
-
避免在擴展期間限制執行個體可用性的過度限制需求。
中斷管理:
-
設定適當的中斷預算,以平衡可用性與維護操作。
-
設定預算百分比時,請考慮您應用程式的節點替換公差。
監控:
-
定期監控
status.nodes欄位,以確保維持所需的容量。 -
設定實際節點計數偏離所需複本時的提醒。
區域分佈:
-
為了實現高可用性,請將靜態容量分散到多個可用區域。
-
當您建立跨越多個可用區域的靜態容量節點集區時,EKS Auto Mode 會將節點分散到指定區域,但不保證分佈均勻。
-
若要跨可用區域進行可預測且均勻的分佈,請建立個別的靜態容量節點集區,每個集區都會使用
topology.kubernetes.io/zone需求固定到特定的可用區域。 -
如果您需要將 12 個節點平均分散到三個區域,請建立三個節點集區,每個節點集區各有 4 個複本,而不是一個節點集區,在三個區域各有 12 個複本。
疑難排解
未到達所需複本的節點:
-
檢查
limits.nodes值是否足夠 -
確認您的需求不會過度限制執行個體選取
-
檢閱您正在使用的執行個體類型和區域的 AWS 服務配額
節點取代耗時太長:
-
調整中斷預算以允許更多並行替換
-
檢查 PodDisruptionBudgets 是否阻止節點終止
非預期的節點終止:
-
檢閱
expireAfter和terminationGracePeriod設定 -
檢查手動節點終止或 AWS 維護事件