はじめに
KubernetesでNodeとPodが使用しているリソース量を表示する方法を紹介します。
また、ローカルでDocker Desktopを利用してkubectl topを利用するための方法も紹介します。
NodeとPodのメモリとCPUの使用量を取得
kubectl topを利用することでNodeとPodのメモリとCPUの使用量を取得することができます。
NodeのメモリとCPU使用量
下記で全てのNodeのリソース使用量を取得します。
1kubectl top node1❯ 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 pod1❯ kubectl top pod
2NAME CPU(cores) MEMORY(bytes)
3test-deployment-8676fcf7bc-mlbv8 5m 6Mi
4test-deployment-8676fcf7bc-pzg86 5m 6MiPod名を指定することで特定の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> --containers1❯ 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 2MiDocker Desktopでkubectl top
Docker Desktopでkubectl topを利用する方法を紹介します。
Docker Desktopでkubectl topを利用するためにはMetrics Serverをインストールする必要があります。こちらはGithubのマニフェストからインストールできます。
まず下記からcomponents.yamlを取得します。
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.yamlmetrics-serverというPodが実行されていれば完了です。
1❯ kubectl -n kube-system get pod | grep metrics-server
2metrics-server-5b6dd75459-gxgk7 1/1 Running 0 27h参考
- kubectlチートシート | Kubernetes
- kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.
- Metrics server issue with hostname resolution of kubelet and apiserver unable to communicate with metric-server clusterIP · Issue #131 · kubernetes-sigs/metrics-server





