【Kubernetes】Metrics Serverとkube-state-metrics
はじめに
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.
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.
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
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-resolution
を30s
にしてみてください。
kube-state-metrics
kube-state-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
を使ってメトリクスを取得してみます。
1❯ curl 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
取得できるメトリクスが一気に返ってきます。
参考
- kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.
- kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.
- Collecting Metrics With Built-in Kubernetes Monitoring Tools | Datadog
- Readiness probe failed: HTTP probe failed with statuscode: 500 · Issue #917 · kubernetes-sigs/metrics-server