はじめに
KubernetesでNodeとPodが使用しているリソース量を表示する方法を紹介します。
また、ローカルでDocker Desktopを利用してkubectl top
を利用するための方法も紹介します。
NodeとPodのメモリとCPUの使用量を取得
kubectl top
を利用することでNodeとPodのメモリとCPUの使用量を取得することができます。
NodeのメモリとCPU使用量
下記で全てのNodeのリソース使用量を取得します。
kubectl top node
❯ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
docker-desktop 343m 8% 1784Mi 61%
Node名を指定することで特定のNodeのリソース使用量を取得できます。
kubectl top node <node name>
❯ kubectl top node docker-desktop
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
docker-desktop 274m 6% 1783Mi 61%
PodのメモリとCPU使用量
下記で全てのPodのリソース使用量を取得します。
kubectl top pod
❯ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
test-deployment-8676fcf7bc-mlbv8 5m 6Mi
test-deployment-8676fcf7bc-pzg86 5m 6Mi
Pod名を指定することで特定のPodのリソース使用量を取得できます。
kubectl top pod <pod name>
❯ kubectl top pod test-deployment-8676fcf7bc-mlbv8
NAME CPU(cores) MEMORY(bytes)
test-deployment-8676fcf7bc-mlbv8 4m 6Mi
さらに--containers
オプションでPod内のコンテナごとのリソース使用量も取得できます。
kubectl top pod <pod name> --containers
❯ kubectl top pod test-deployment-8676fcf7bc-mlbv8 --containers
POD NAME CPU(cores) MEMORY(bytes)
test-deployment-8676fcf7bc-mlbv8 nginx 0m 3Mi
test-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
を追記します。
-- 省略 --
protocol: TCP
targetPort: https
selector:
k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: metrics-server
name: metrics-server
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: metrics-server
strategy:
rollingUpdate:
maxUnavailable: 0
template:
metadata:
labels:
k8s-app: metrics-server
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls # 追記する
image: k8s.gcr.io/metrics-server/metrics-server:v0.5.2
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
-- 省略 --
追記したらマニフェストを反映させてインストールします。
kubectl apply -f components.yaml
metrics-server
というPodが実行されていれば完了です。
❯ kubectl -n kube-system get pod | grep metrics-server
metrics-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