【Kubernetes】kubectl topでNodeとPodのリソース取得

2022.01.17
2024.03.24
Kubernetes
kubectl

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

KubernetesでNodeとPodが使用しているリソース量を表示する方法を紹介します。

また、ローカルでDocker Desktopを利用してkubectl topを利用するための方法も紹介します。

NodeとPodのメモリとCPUの使用量を取得

kubectl topを利用することでNodeとPodのメモリとCPUの使用量を取得することができます。

NodeのメモリとCPU使用量

下記で全てのNodeのリソース使用量を取得します。

1kubectl top node
1❯ kubectl top node
2NAME             CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
3docker-desktop   343m         8%     1784Mi          61%

Node名を指定することで特定のNodeのリソース使用量を取得できます。

1kubectl top node <node name>
1❯ kubectl top node docker-desktop
2NAME             CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
3docker-desktop   274m         6%     1783Mi          61%

PodのメモリとCPU使用量

下記で全てのPodのリソース使用量を取得します。

1kubectl top pod
1❯ kubectl top pod
2NAME                               CPU(cores)   MEMORY(bytes)
3test-deployment-8676fcf7bc-mlbv8   5m           6Mi
4test-deployment-8676fcf7bc-pzg86   5m           6Mi

Pod名を指定することで特定のPodのリソース使用量を取得できます。

1kubectl top pod <pod name>
1❯ kubectl top pod test-deployment-8676fcf7bc-mlbv8
2NAME                               CPU(cores)   MEMORY(bytes)
3test-deployment-8676fcf7bc-mlbv8   4m           6Mi

さらに--containersオプションでPod内のコンテナごとのリソース使用量も取得できます。

1kubectl top pod <pod name> --containers
1❯ kubectl top pod test-deployment-8676fcf7bc-mlbv8 --containers
2POD                                NAME    CPU(cores)   MEMORY(bytes)
3test-deployment-8676fcf7bc-mlbv8   nginx   0m           3Mi
4test-deployment-8676fcf7bc-mlbv8   redis   4m           2Mi

Docker Desktopでkubectl top

Docker Desktopでkubectl topを利用する方法を紹介します。

Docker Desktopでkubectl topを利用するためにはMetrics Serverをインストールする必要があります。こちらはGithubのマニフェストからインストールできます。

まず下記からcomponents.yamlを取得します。

Releases · kubernetes-sigs/metrics-server

Releases · kubernetes-sigs/metrics-server

Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines. - kubernetes-sigs/metrics-server

このままkubectl applyしてもPodが起動しないので下記のcomponents.yamlの下記の部分に--kubelet-insecure-tlsを追記します。

1      -- 省略 --
2
3    protocol: TCP
4    targetPort: https
5  selector:
6    k8s-app: metrics-server
7---
8apiVersion: apps/v1
9kind: Deployment
10metadata:
11  labels:
12    k8s-app: metrics-server
13  name: metrics-server
14  namespace: kube-system
15spec:
16  selector:
17    matchLabels:
18      k8s-app: metrics-server
19  strategy:
20    rollingUpdate:
21      maxUnavailable: 0
22  template:
23    metadata:
24      labels:
25        k8s-app: metrics-server
26    spec:
27      containers:
28      - args:
29        - --cert-dir=/tmp
30        - --secure-port=4443
31        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
32        - --kubelet-use-node-status-port
33        - --metric-resolution=15s
34        - --kubelet-insecure-tls # 追記する
35        image: k8s.gcr.io/metrics-server/metrics-server:v0.5.2
36        imagePullPolicy: IfNotPresent
37        livenessProbe:
38          failureThreshold: 3
39
40      -- 省略 --

追記したらマニフェストを反映させてインストールします。

1kubectl apply -f components.yaml

metrics-serverというPodが実行されていれば完了です。

1❯ kubectl -n kube-system get pod | grep metrics-server
2metrics-server-5b6dd75459-gxgk7          1/1     Running   0                 27h

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee