26S03a

Young-Kyoo Kim·3일 전

kubectljq를 사용해 특정 Pod 이름 문자열을 필터링하고 리소스(CPU 또는 메모리) 조건에 맞는 개수를 집계하는 명령어입니다.

CPU 기준 집계 명령어 (단일 컨테이너 기준)

특정 네임스페이스(-n <namespace>) 또는 전체 클러스터(-A)에서 Pod 이름에 특정 문자열(YOUR_POD_NAME_KEYWORD)이 포함된 대상을 집계합니다.

kubectl get pods -A -o json | jq -r '
  [
    .items[] 
    | select(.metadata.name | contains("YOUR_POD_NAME_KEYWORD"))
    | .spec.containers[] 
    | {
        req: (.resources.requests.cpu // "0"),
        lim: (.resources.limits.cpu // "0")
      }
  ] 
  | {
      "Limit 8 / Request 4": map(select((.lim == "8" or .lim == "8000m") and (.req == "4" or .req == "4000m"))) | length,
      "Limit 8 / Request 3": map(select((.lim == "8" or .lim == "8000m") and (.req == "3" or .req == "3000m"))) | length
    }
'

메모리(Gi 단위) 기준 집계 명령어

메모리 단위(Gi) 기준인 경우 필터 조건에 단위(Gi)를 매칭합니다.

kubectl get pods -A -o json | jq -r '
  [
    .items[] 
    | select(.metadata.name | contains("YOUR_POD_NAME_KEYWORD"))
    | .spec.containers[] 
    | {
        req: (.resources.requests.memory // "0"),
        lim: (.resources.limits.memory // "0")
      }
  ] 
  | {
      "Limit 8Gi / Request 4Gi": map(select(.lim == "8Gi" and .req == "4Gi")) | length,
      "Limit 8Gi / Request 3Gi": map(select(.lim == "8Gi" and .req == "3Gi")) | length
    }
'

참고 사항

  • 밀리코어 표기 대응: CPU의 경우 매니페스트에 따라 8 대신 8000m, 4 대신 4000m 등으로 입력되어 있을 수 있어 조건문에 두 형식을 모두 포함했습니다.
  • 다중 컨테이너 Pod: Pod 하나에 컨테이너가 여러 개 있거나 컨테이너 리소스의 총합(Pod 레벨)을 구해야 한다면 containers 배열의 합산 로직이 추가되어야 합니다.

0개의 댓글