본문 바로가기

개발하자

(도커 명령 없이) 쿠버네티스에서 컨테이너의 디스크 사용량을 가져오는 방법은 무엇입니까?

반응형

(도커 명령 없이) 쿠버네티스에서 컨테이너의 디스크 사용량을 가져오는 방법은 무엇입니까?

Kubernetes 클러스터가 있는데 컨테이너에서 사용하는 디스크 공간이 얼마인지 알고 싶습니다. 탑재된 볼륨을 말하는 것이 아닙니다.

또는 와 같은 도커 명령을 사용하여 이 정보를 얻을 수 있지만 모든 작업자 노드에 연결하고 싶지는 않습니다.

를 통해 컨테이너의 디스크 사용량을 확인할 수 있는 방법이 있습니까? 아니면 이 정보를 확인할 수 있는 큐브 메트릭이 있습니까?




예, 하지만 현재 kubectl을 사용하지 않고 kube-apiser 서버(프록시)를 통해 또는 kubelet HTTP(s) 서버 끝점(기본 포트)에 직접 호출하여 메트릭을 가져올 수 있습니다. 디스크 메트릭은 일반적으로 엔드포인트에서 사용할 수 있으며 일부 메트릭도 엔드포인트에서 찾을 수 있습니다.

예를 들어 첫 번째 포드의 첫 번째 컨테이너에 대한 '사용된 바이트'를 가져오려면 다음을 통해 반환됩니다:

$ curl -k -s -H 'Authorization: Bearer <REDACTED>' \
  https://kube-apiserver:6443/api/v1/nodes/<node-name>/proxy/stats/summary \
  | jq '.pods[0].containers[0].rootfs.usedBytes'

베어러 토큰은 다음과 같이 클러스터 역할에 연결된 서비스 계정 토큰일 수 있습니다:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
  name: myrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/proxy
  verbs:
  - get
  - list
  - watch
- nonResourceURLs:
  - /metrics
  - /api/*
  verbs:
  - get



Rico의 답변에 추가하여 API 서버에 대한 프록시를 설정하여 서버 주소 및 인증에 대한 세부 정보를 API에 쿼리할 수 있습니다.

를 사용하여 API 서버에 대한 로컬 프록시 설정

kubectl proxy --port=8080

그런 다음 다음과 같은 명령을 사용할 수 있습니다

curl http://localhost:8080/api/v1/nodes/<node-name>/proxy/stats/summary 2>/dev/null | jq '.pods[].containers[].rootfs.usedBytes'

각 컨테이너별 rootfs 사용량 목록을 제공합니다.




Stephen의 답변에 덧붙여, 여기 당신이 크기(바이트)와 함께 포드 이름을 원하는지에 대한 컬 쿼리가 있다.

curl http://localhost:8080/api/v1/nodes/<node-name>/proxy/stats/summary 2>/dev/null | jq '.pods[].containers[] | "\(.name) \(.rootfs.usedBytes)"'



표 대신 을 사용하여 인쇄하는 하나의 추가 기능으로 사용합니다. 사이즈도 출력됩니다

echo -e "NODE\tNAMESPACE\tPOD\tCONTAINER\tROOTFS\tLOGS"
kubectl get --raw "/api/v1/nodes/${node}/proxy/stats/summary" | jq -r '. | .node.nodeName as $node | .pods[] | .podRef.namespace as $namespace | .podRef.name as $pod | .containers[] | [$node, $namespace, $pod, .name, .rootfs.usedBytes, .logs.usedBytes] | @tsv'

반응형