EKS Auto 模式的靜態容量節點集區 - Amazon EKS

協助改進此頁面

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

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 是否阻止節點終止

非預期的節點終止:

  • 檢閱 expireAfterterminationGracePeriod設定

  • 檢查手動節點終止或 AWS 維護事件