はじめに
Metrics Serverとkube-state-metricsについて、どちらがどんなものかまとめました。
実際にローカルで試す場合の方法も紹介します。
Metrics Serverとkube-state-metrics
- Metrics Server
- Kubernetesオブジェクトのリソース使用状況のメトリクスを提供
- Horizontal Pod AutoscalingやVertical Pod Autoscalingに使われる
kubectl top
でMetrics APIにアクセス可能
- kube-state-metrics
- Kubernetesオブジェクトの状態に関するメトリクスを提供
- Prometheusなどに使われる
ローカルで試す
ローカルのDocker DesktopのKubernetesでMetrics Serverとkube-state-metricsを試す方法を紹介します。
Metrics Server
Metrics Serverは、公式リポジトリのマニフェストを反映することで使えるようになります。
まず下記からcomponents.yaml
を取得します。
Docker Desktopを使っている場合、このまま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-66d9956498-549vd 1/1 Running 0 61s
これでもPodがREADYにならない場合は、
--metric-resolution
を30s
にしてみてください。
kube-state-metrics
kube-state-metricsも、リポジトリをクローンしてきて、マニフェストを反映することで使えるようになります。
リポジトリをクローンして、マニフェストを反映します。
git clone https://github.com/kubernetes/kube-state-metrics.git
cd kube-state-metrics
kubectl apply -f examples/standard
kubectl proxy
でServiceにアクセスできるようにします。
❯ kubectl proxy
Starting 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
を使ってメトリクスを取得してみます。
❯ curl localhost:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:http-metrics/proxy/metrics
# HELP kube_certificatesigningrequest_annotations Kubernetes annotations converted to Prometheus labels.
# TYPE kube_certificatesigningrequest_annotations gauge
# HELP kube_certificatesigningrequest_labels Kubernetes labels converted to Prometheus labels.
# TYPE kube_certificatesigningrequest_labels gauge
# HELP kube_certificatesigningrequest_created Unix creation timestamp
# TYPE kube_certificatesigningrequest_created gauge
# HELP kube_certificatesigningrequest_condition The number of each certificatesigningrequest condition
# TYPE kube_certificatesigningrequest_condition gauge
# HELP kube_certificatesigningrequest_cert_length Length of the issued cert
# TYPE kube_certificatesigningrequest_cert_length gauge
# HELP kube_configmap_annotations Kubernetes annotations converted to Prometheus labels.
# TYPE kube_configmap_annotations gauge
kube_configmap_annotations{namespace="kube-system",configmap="extension-apiserver-authentication"} 1
kube_configmap_annotations{namespace="kube-system",configmap="kube-root-ca.crt"} 1
kube_configmap_annotations{namespace="default",configmap="kube-root-ca.crt"} 1
kube_configmap_annotations{namespace="kube-node-lease",configmap="kube-root-ca.crt"} 1
kube_configmap_annotations{namespace="kube-public",configmap="kube-root-ca.crt"} 1
kube_configmap_annotations{namespace="kube-system",configmap="coredns"} 1
kube_configmap_annotations{namespace="kube-public",configmap="cluster-info"} 1
...
取得できるメトリクスが一気に返ってきます。
参考
- 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