コンテンツにスキップ

kube-state-metrics@Prometheus

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. kube-state-metricsの仕組み

記入中

...


02. セットアップ

チャートとして

チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。

$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts

$ helm repo update

$ kubectl create namespace prometheus

$ helm install <Helmリリース名> <チャートリポジトリ名>/kube-state-metrics -n prometheus --version <バージョンタグ>


03. マニフェスト

マニフェストの種類

▼ Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-state-metrics
  namespace: prometheus
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-state-metrics
  replicas: 1
  template:
    spec:
      hostNetwork: "false"
      serviceAccountName: kube-state-metrics
      securityContext:
        fsGroup: 65534
        runAsGroup: 65534
        runAsNonRoot: "true"
        runAsUser: 65534
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: kube-state-metrics
          args:
            - --port=8080
            - --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpoints,horizontalpodautoscalers,ingresses,jobs,leases,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments
            # 必要なKubernetesリソースのラベルをメトリクスに付与する。
            # kube_node_labels、kube_deployment_labels、kube_pod_labels、で取得できる
            # 例えば、クラウドプロバイダーのNodeからNodeグループ名を含むラベル (例:eks.amazonaws.com/nodegroup) を取得する場合、設定する必要がある。
            - --metric-labels-allowlist=nodes=[*],deployments=[*],pods=[*]
            # 必要なKubernetesリソースのアノテーションをメトリクスに付与する。
            - --metric-annotations-allowlist=nodes=[*],deployments=[*],pods=[*]
          imagePullPolicy: IfNotPresent
          image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2
          ports:
            - containerPort: 8080
              name: "http"
          livenessProbe:
            httpGet:
              path: /healthz
              port: 8080
            initialDelaySeconds: 5
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 5
            timeoutSeconds: 5
          securityContext:
            allowPrivilegeEscalation: "false"
            capabilities:
              drop:
                - ALL


メトリクスの一覧

▼ 確認方法

Node Exporterの場合は、Nodeの『127.0.0.1:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:http-metrics/proxy/metrics』をコールすると、PromQLで使用できるメトリクスを取得できる。

$ curl http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:http-metrics/proxy/metrics

...

kube_node_info
kube_pod_info
kube_service_info

...

▼ よく使用するメトリクス

メトリクス メトリクスの種類 説明 PromQL例
kube_node_status_condition 記入中... Nodeの現在のライフサイクルフェーズを表す。 kube_node_status_condition{job="kube-state-metrics",condition="Ready",status="true"}
kube_pod_status_phase 記入中... Podの現在ライフサイクルフェーズを表す。 kube_pod_status_phase{job="kube-state-metrics",phase="Succeeded"}
kube_pod_container_status_terminated Count Terminatedフェーズになったコンテナ数を表す。 kube_pod_container_status_terminated{job="kube-state-metrics"}
kube_pod_container_resource_limits Count Podのハードウェアリソースの.spec.containers[*].resources.limitsキーを表す。設定していなければnullになる。 kube_pod_container_resource_limits{job="kube-state-metrics"}
kube_deployment_spec_replicas Count Deploymentで指定しているPodのレプリカ数を表す。 kube_deployment_spec_replicas{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_deployment_status_replicas Count Deploymentで指定しているPodのレプリカ数のうち、現在実行されているPod数を表す。 kube_deployment_status_replicas{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_deployment_status_replicas_available Count Deploymentで指定しているPodのレプリカ数のうち、現在利用できるPod数を表す。 kube_deployment_status_replicas_available{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_deployment_status_replicas_unavailable Count Deploymentで指定しているPodのレプリカ数のうち、現在利用できないPod数を表す。 kube_deployment_status_replicas_unavailable{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_daemonset_status_desired_number_scheduled Count DaemonSetで指定しているPodのレプリカ数を表す。 kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_daemonset_status_current_number_scheduled Count DaemonSetで指定しているPodのレプリカ数のうち、現在実行されているPod数を表す。 kube_daemonset_status_current_number_scheduled{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_daemonset_status_number_available Count DaemonSetで指定しているPodのレプリカ数のうち、現在利用できるPod数を表す。 kube_daemonset_status_number_available{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}
kube_daemonset_status_number_unavailable Count DaemonSetで指定しているPodのレプリカ数のうち、現在利用できないPod数を表す。 kube_daemonset_status_number_unavailable{job="kube-state-metrics",deployment="foo-deployment",namespace="foo"}