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

スポンサーリンク

はじめに

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

参考

タイトルとURLをコピーしました