웹사이트 검색

Metrics Server 및 Kubectl로 Kubernetes 리소스 사용량을 모니터링하는 방법 Top


Kubernetes 클러스터의 리소스 사용량을 모니터링하는 것은 성능을 추적하고 워크로드가 효율적으로 작동하는지 이해할 수 있도록 하는 데 필수적입니다. kubectl top 명령은 클러스터에서 직접 메트릭을 스트리밍하므로 터미널의 기본 사항에 액세스할 수 있습니다.

이 명령은 일반적으로 새로운 Kubernetes 환경에서 바로 작동하지 않습니다. 클러스터에 설치되는 Metrics Server 애드온에 따라 다릅니다. 이 구성 요소는 노드 및 포드에서 메트릭을 수집하고 데이터를 검색하기 위한 API를 제공합니다.

이 기사에서는 Metrics Server를 설치하고 kubectl top을 사용하여 측정에 액세스하는 방법을 보여줍니다. 각 노드 및 포드의 CPU 및 메모리 사용량을 볼 수 있습니다.

Kubernetes에 메트릭 서버 추가

Kubernetes 배포에는 일반적으로 Metrics Server가 내장되어 있지 않습니다. kubectl top을 실행하여 클러스터가 이미 지원하는지 쉽게 확인할 수 있습니다.

$ kubectl top node
error: Metrics API not available

오류 메시지는 Metrics Server API가 클러스터에 없음을 확인합니다.

Metrics Server는 Kubernetes SIG(Special Interest Group) 커뮤니티 내에서 유지 관리됩니다. 일반 YAML 매니페스트 또는 프로젝트의 Helm 차트를 사용하여 클러스터에 추가할 수 있습니다.

이 자습서에서는 매니페스트 파일을 사용합니다. 다음 Kubectl 명령을 실행하여 Metrics Server를 설치합니다.

$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created

Metrics Server는 이제 Kubernetes 리소스 소비 데이터 수집 및 노출을 시작합니다. 오류와 함께 설치에 실패하면 클러스터가 프로젝트 요구 사항을 충족하는지 확인해야 합니다. Metrics Server에는 일부 환경에서 지원되지 않을 수 있는 특정 종속성이 있습니다.

많은 Kubernetes 배포는 자체 애드온 시스템을 사용하여 Metrics Server 지원을 번들로 제공합니다. 이 명령을 사용하여 Metrics Server를 Minikube 클러스터에 쉽게 추가할 수 있습니다. 예를 들면 다음과 같습니다.

$ minikube addons enable metrics-server
Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
The 'metrics-server' addon is enabled

Kubectl Top으로 측정항목 검색

Metrics Server가 설치되면 이제 kubectl top을 실행하여 수집한 정보에 액세스할 수 있습니다.

node 하위 명령을 사용하여 클러스터에 있는 각 노드의 현재 리소스 사용률을 가져옵니다.

$ kubectl top node
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
minikube   249m         3%     847Mi           2%

pod 하위 명령은 각 Pod에 대한 개별 메트릭을 제공합니다.

$ kubectl top pod
NAME    CPU(cores)   MEMORY(bytes)   
nginx   120m         8Mi

이렇게 하면 default 네임스페이스에 포드가 표시됩니다. 특정 네임스페이스의 Pod에 관심이 있는 경우 --namespace 플래그를 추가합니다.

$ kubectl top pod --namespace demo-app
NAME    CPU(cores)   MEMORY(bytes)   
nginx   0m           2Mi

클러스터의 모든 포드를 나열하기 위해 --all-namespaces 플래그도 지원됩니다.

새 포드가 생성된 후 측정항목을 사용할 수 있게 되기까지 몇 분 정도 걸릴 수 있습니다. 메트릭 서버의 파이프라인에 지연이 있으므로 자체적으로 성능 문제가 되지 않습니다.

kubectl top 명령은 수십 개의 메트릭으로 당신을 압도하지 않습니다. CPU 및 메모리 사용의 기본 요소를 다루는 데 중점을 둡니다. 이 기본 시작은 전체 사용률의 급증을 초래한 포드를 식별하는 것과 같이 단순히 빠른 데이터가 필요한 시나리오에 적합할 수 있습니다.

혼동을 일으키는 한 가지 원인은 CPU(cores) 필드에 보고된 100m 값일 수 있습니다. 이 명령은 CPU 사용량을 밀리코어 단위로 표시합니다. 1000m 측정은 항상 단일 CPU 코어의 100% 소비를 의미합니다. 500m는 1개 코어의 50% 소비를 나타내고 2000m는 2개 코어가 점유되고 있음을 의미합니다.

개체 정렬 순서 변경

kubectl top 명령은 방출된 객체 목록을 CPU 또는 메모리 소비별로 선택적으로 정렬할 수 있습니다. 이렇게 하면 클러스터 리소스에 가장 큰 압력을 가하는 노드 또는 포드를 더 쉽게 빠르게 찾을 수 있습니다.

이 동작을 활성화하려면 값으로 cpu 또는 memory를 사용하여 --sort-by 플래그를 추가합니다.

$ kubectl top pod --sort-by=memory
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
nginx-1    249m         3%     1790Mi          5%
nginx-2    150m         1%     847Mi           2%

개체 목록 필터링

다른 Kubectl 명령과 마찬가지로 --selector 플래그를 사용하면 개체 목록을 특정 레이블이 있는 항목으로 필터링할 수 있습니다.

$ kubectl top pod --selector application=demo-app
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
nginx-1    249m         3%     1790Mi          5%
nginx-2    150m         1%     847Mi           2%

이 예에서는 application: demo-app 레이블이 있는 포드만 출력에 포함됩니다. =, ==!=가 연산자로 지원됩니다. 여러 제약 조건은 application=demo-app,version!=1과 같이 쉼표로 구분된 문자열로 묶어서 적용할 수 있습니다. 개체는 쿼리의 모든 레이블 필터와 일치하는 경우에만 표시됩니다.

특정 리소스 활용하기

top nodetop pod 하위 명령 모두 가져올 특정 노드 또는 Pod의 이름을 전달할 수 있습니다. 해당 항목과 관련된 현재 메트릭이 별도로 표시됩니다.

node 또는 pod 바로 뒤에 개체의 이름을 명령에 대한 일반 인수로 제공합니다.

$ kubectl top node minikube
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
minikube   245m         3%     714Mi           2%

요약

kubectl top 명령은 Kubernetes 클러스터의 노드 및 포드에 대한 필수 리소스 소비 메트릭을 표시합니다. 이를 사용하여 각 워크로드와 관련된 CPU 및 메모리 사용량을 빠르게 확인할 수 있습니다. 이 정보는 성능 문제를 진단하고 다른 노드를 추가할 시기를 식별하는 데 도움이 될 수 있습니다.

명령을 사용하기 전에 클러스터에 Kubernetes Metrics Server를 설치해야 합니다. 리소스 활용 데이터를 노출하는 API를 제공합니다. Metrics Server를 활성화하면 성능 오버헤드가 발생하지만 대부분의 배포에서는 일반적으로 무시할 수 있습니다. 특정 환경에서 실행되는 워크로드에 따라 다를 수 있지만 일반적으로 모니터링되는 노드당 1m 코어의 CPU와 2MiB의 메모리가 필요합니다.