Karpenter가 노드 Consolidate를 못하네요. ㅜ.ㅜ

EKS에서 Karpenter를 사용 중인데요. 현재 kube-system pod만 실행 중인 노드가 최소 두 개 이상이고 리소스를 거의 사용하지 않기 때문에 Karpenter가 자동으로 Consolidate을 해야되는 걸로 알고 있는데 안되고 있습니다.

현재 사용 중인 NodePool 설정은 아래와 같으며, 모든 NodePool은 동일한 구성을 따르고 있습니다.

spec:
  disruption:
    budgets:
      - nodes: 20%
    consolidateAfter: 30s
    consolidationPolicy: WhenEmptyOrUnderutilized
  template:
    metadata:
      labels: {}
    spec:
      expireAfter: 336h
      nodeClassRef:
        group: karpenter.k8s.aws
        kind: EC2NodeClass
        name: prod-ec2-node-class
      requirements:
        - key: kubernetes.io/arch
          operator: In
          values:
            - amd64
        - key: kubernetes.io/os
          operator: In
          values:
            - linux
        - key: karpenter.sh/capacity-type
          operator: In
          values:
            - spot
        - key: node.kubernetes.io/instance-category
          operator: In
          values:
            - t

또한 사용하지 않는 노드들을 보다가, 한 노드에서 아래의 로그가 발견 됐습니다.

Normal DisruptionBlocked 78s (x53 over 111m) karpenter Node is nominated for a pending pod

하지만 실제로는 Pending 상태의 파드는 존재하지 않습니다.

현재 사용 중인 Kubernetes 버전은 1.33이며, Karpenter는 다음 Terraform 모듈을 통해 설치하였습니다:
terraform-aws-modules/eks/aws - karpenter submodule 버전 20.36

무엇이 문제일까요?

1 Like

일단 전달해주신 정보로만 봐서는 Karpeneter의 버전을 특정할 수가 없습니다.
terraform 리소스는 Karpenter를 설치하기 위한 AWS 리소스들을 모아놓은 것이기 떄문에 Karpenter는 별도로 설치한 것으로 보입니다.

소스코드 기준으로만 말씀드리면, 아래 부분으로 확인이 됩니다.

로직 상에서도 Pending된 state의 Pod가 할당된 Node로 선정된 Node에 대해서는 Distription을 하지 않는다고 되있기 떄문에 새로 뜨는 노드가 지정된 Node는 아닌지 확인할 필요가 있어보입니다.

6 Likes

@Youngjin_Jung 님! 답변주신 내용 확인하겠습니다. 너무 감사합니다.

3 Likes

세곤이사님! 많은 부분을 커버하시는 군요. :slight_smile:

1 Like

영진님 이번에도 좋은 답변 감사합니다😄
세곤 이사님 나중엔 Karpenter 버전 정보를 주시면 더 좋을 듯해요 :+1::+1:

1 Like

20.36 랍니다. :slight_smile: