【Kubernetes】Metrics Serverとkube-state-metrics

2022.06.24
2024.03.24
Kubernetes
kube-state-metricsMetrics Server

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

はじめに

Metrics Serverとkube-state-metricsについて、どちらがどんなものかまとめました。

実際にローカルで試す場合の方法も紹介します。

Metrics Serverとkube-state-metrics

  • Metrics Server
    • Kubernetesオブジェクトのリソース使用状況のメトリクスを提供
    • Horizontal Pod AutoscalingやVertical Pod Autoscalingに使われる
    • kubectl topでMetrics APIにアクセス可能
GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.

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

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

  • kube-state-metrics
    • Kubernetesオブジェクトの状態に関するメトリクスを提供
    • Prometheusなどに使われる
GitHub - kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.

GitHub - kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.

Add-on agent to generate and expose cluster-level metrics. - kubernetes/kube-state-metrics

ローカルで試す

ローカルのDocker DesktopのKubernetesでMetrics Serverとkube-state-metricsを試す方法を紹介します。

Metrics Server

Metrics Serverは、公式リポジトリのマニフェストを反映することで使えるようになります。

まず下記から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

Docker Desktopを使っている場合、このまま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-66d9956498-549vd  1/1  Running  0  61s

これでもPodがREADYにならない場合は、--metric-resolution30sにしてみてください。

kube-state-metrics

kube-state-metricsも、リポジトリをクローンしてきて、マニフェストを反映することで使えるようになります。

GitHub - kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.

GitHub - kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.

Add-on agent to generate and expose cluster-level metrics. - kubernetes/kube-state-metrics

リポジトリをクローンして、マニフェストを反映します。

1git clone https://github.com/kubernetes/kube-state-metrics.git
2cd kube-state-metrics
3kubectl apply -f examples/standard

kubectl proxyでServiceにアクセスできるようにします。

1❯ kubectl proxy
2Starting to serve on 127.0.0.1:8001

http://localhost:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:http-metrics/proxy/metricsからメトリクスを取得できるので、 proxy経由でcurlを使ってメトリクスを取得してみます。

1curl localhost:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:http-metrics/proxy/metrics
2# HELP kube_certificatesigningrequest_annotations Kubernetes annotations converted to Prometheus labels.
3# TYPE kube_certificatesigningrequest_annotations gauge
4# HELP kube_certificatesigningrequest_labels Kubernetes labels converted to Prometheus labels.
5# TYPE kube_certificatesigningrequest_labels gauge
6# HELP kube_certificatesigningrequest_created Unix creation timestamp
7# TYPE kube_certificatesigningrequest_created gauge
8# HELP kube_certificatesigningrequest_condition The number of each certificatesigningrequest condition
9# TYPE kube_certificatesigningrequest_condition gauge
10# HELP kube_certificatesigningrequest_cert_length Length of the issued cert
11# TYPE kube_certificatesigningrequest_cert_length gauge
12# HELP kube_configmap_annotations Kubernetes annotations converted to Prometheus labels.
13# TYPE kube_configmap_annotations gauge
14kube_configmap_annotations{namespace="kube-system",configmap="extension-apiserver-authentication"} 1
15kube_configmap_annotations{namespace="kube-system",configmap="kube-root-ca.crt"} 1
16kube_configmap_annotations{namespace="default",configmap="kube-root-ca.crt"} 1
17kube_configmap_annotations{namespace="kube-node-lease",configmap="kube-root-ca.crt"} 1
18kube_configmap_annotations{namespace="kube-public",configmap="kube-root-ca.crt"} 1
19kube_configmap_annotations{namespace="kube-system",configmap="coredns"} 1
20kube_configmap_annotations{namespace="kube-public",configmap="cluster-info"} 1
21
22...
23

取得できるメトリクスが一気に返ってきます。

参考

Support

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

buy me a coffee
Share

Profile

author

Masa

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

buy me a coffee