【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.
ScalableandefficientsourceofcontainerresourcemetricsforKubernetesbuilt-inautoscalingpipelines.-GitHub-kubernetes-sigs/metrics-server:Scalableandefficientsourceo...
  • kube-state-metrics
    • Kubernetesオブジェクトの状態に関するメトリクスを提供
    • Prometheusなどに使われる
GitHub - kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.
Add-onagenttogenerateandexposecluster-levelmetrics.-GitHub-kubernetes/kube-state-metrics:Add-onagenttogenerateandexposecluster-levelmetrics.

ローカルで試す

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

Metrics Server

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

まず下記からcomponents.yamlを取得します。

Releases · kubernetes-sigs/metrics-server
ScalableandefficientsourceofcontainerresourcemetricsforKubernetesbuilt-inautoscalingpipelines.-kubernetes-sigs/metrics-server

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-resolution30sにしてみてください。

kube-state-metrics

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

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

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

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

...

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

参考

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