【Kubernetes】kubectl topでNodeとPodのリソース取得
はじめに
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
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
参考
- 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