EKS Auto Mode의 정적 용량 노드 풀 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

EKS Auto Mode의 정적 용량 노드 풀

Amazon EKS Auto Mode는 포드 수요에 관계없이 고정된 수의 노드를 유지 관리하는 정적 용량 노드 풀을 지원합니다. 정적 용량 노드 풀은 일관된 인프라 공간을 유지 관리해야 하는 예측 가능한 용량, 예약 인스턴스 또는 특정 규정 준수 요구 사항이 필요한 워크로드에 유용합니다.

포드 예약 수요에 따라 조정되는 동적 노드 풀과 달리 정적 용량 노드 풀은 구성한 노드 수를 유지 관리합니다.

기본 예제

다음은 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를 고려하고 실행 중인 포드를 나머지 노드로 다시 예약할 수 있도록 노드를 정상적으로 종료합니다.

정적 용량 노드 풀 모니터링

다음 명령을 사용하여 정적 용량 노드 풀을 모니터링합니다.

# 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.nodesreplicas보다 높게 설정합니다.

  • 제한을 설정할 때 노드 드리프트 또는 AMI 업데이트 중에 필요한 최대 용량을 고려합니다.

인스턴스 선택:

  • 예약 인스턴스 또는 특정 하드웨어 요구 사항이 있는 경우 특정 인스턴스 유형을 사용합니다.

  • 조정 중에 인스턴스 가용성을 제한할 수 있는 지나치게 제한적인 요구 사항을 피합니다.

중단 관리:

  • 가용성과 유지 관리 작업의 균형을 맞추도록 적절한 중단 예산을 구성합니다.

  • 예산 백분율을 설정할 때 노드 교체에 대한 애플리케이션의 허용 오차를 고려합니다.

모니터링

  • status.nodes 필드를 정기적으로 모니터링하여 원하는 용량이 유지되는지 확인합니다.

  • 실제 노드 수가 원하는 복제본에서 벗어나는 경우에 대한 알림을 설정합니다.

영역 분산:

  • 고가용성을 위해 여러 가용 영역으로 정적 용량을 분산합니다.

  • 여러 가용 영역에 걸쳐 분산된 정적 용량 노드 풀을 생성하면 EKS Auto Mode는 지정된 영역에 노드를 분산하지만 균등한 분산을 보장하지는 않습니다.

  • 여러 가용 영역에서 예측 가능하고 균등하게 배포하려면 topology.kubernetes.io/zone 요구 사항을 사용하여 각각 특정 가용 영역에 고정되는 별도의 정적 용량 노드 풀을 생성합니다.

  • 3개 영역에 균등하게 분산된 노드 12개가 필요한 경우 3개 영역에 복제본 12개가 있는 노드 풀 1개가 아니라 각각 복제본 4개가 있는 노드 풀 3개를 생성합니다.

문제 해결

노드가 원하는 복제본에 도달하지 않음:

  • limits.nodes 값이 충분한지 확인

  • 요구 사항이 인스턴스 선택을 지나치게 제한하지 않는지 확인

  • 사용하는 인스턴스 유형 및 리전에 대한 AWS 서비스 할당량 검토

노드 교체 시간이 너무 오래 걸림:

  • 더 많은 동시 교체를 허용하도록 중단 예산 조정

  • PodDisruptionBudgets가 노드 종료를 방지하는지 확인

예기치 않은 노드 종료:

  • expireAfterterminationGracePeriod 설정 검토

  • 수동 노드 종료 또는 AWS 유지 관리 이벤트 확인