Kube State Metrics
Kube State Metrics を通じてクラスタリソースのリアルタイム情報を収集する
設定¶
Kube-state-metrics のデプロイ¶
- Helm をインストールする(オンラインインストールモード)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
- kube-promethues をインストールする
kube-promethues のインストールパッケージは Bitnami の Helm chart 方式を採用しています。Bitnami 公式サイト
コミュニティから最新バージョンの Chart パッケージを取得する:
検証済みのオフライン版を取得する:
次のコマンドを実行してファイルを展開する:
Values ファイルの設定説明:
global:
# プライベートレポジトリのプロジェクトアドレスに変更する
imageRegistry: ""
## E.g.
## imagePullSecrets:
## - myRegistryKeySecretName
##
# ここはプライベートレポジトリの秘密情報の secret 名に変更する
imagePullSecrets: []
# ここでは df-nfs-storage をクラスタ内で利用可能な storageClass に変更する
defaultstorageClass: "df-nfs-storage"
# ここでは df-nfs-storage をクラスタ内で利用可能な storageClass に変更する
storageClass: "df-nfs-storage"
## Kubernetes プラットフォーム向けの互換性調整
##
compatibility:
## Openshift 向けの互換性調整
##
openshift:
## @param global.compatibility.openshift.adaptSecurityContext deployment の securityContext セクションを Openshift restricted-v2 SCC に対応させるように調整する: runAsUser、runAsGroup、fsGroup を削除し、プラットフォームに許可されたデフォルト ID を使用させる。可能な値: auto(検出された実行中クラスタが Openshift の場合に適用)、force(常に調整を実行)、disabled(調整しない)
##
adaptSecurityContext: auto
## @section Common parameters
....
注意: デプロイする namespace は datakit コレクタの設定にある namespace と一致している必要があります
- 次のコマンドを実行してデプロイする:
デプロイ完了後、次のコマンドでデプロイ成功の有無を確認する:
Datakit の設定¶
datakit.yamlのConfigMapリソースにkubernetesprometheus.confを追加する
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
kubernetesprometheus.conf: |-
[inputs.kubernetesprometheus]
[[inputs.kubernetesprometheus.instances]]
role = "service"
namespaces = ["datakit"]
selector = "app.kubernetes.io/name=kube-state-metrics"
scrape = "true"
scheme = "http"
port = "__kubernetes_service_port_http_port"
path = "/metrics"
params = ""
interval = "15s"
[inputs.kubernetesprometheus.instances.custom]
measurement = "kube-state-metrics"
job_as_measurement = true
[inputs.kubernetesprometheus.instances.custom.tags]
cluster_name_k8s = "promethues-cluster"
job = "kube-state-metrics"
svc_name = "__kubernetes_service_name"
pod_name = "__kubernetes_service_target_name"
pod_namespace = "__kubernetes_service_target_namespace"
[inputs.kubernetesprometheus.instances.auth]
bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
[inputs.kubernetesprometheus.instances.auth.tls_config]
insecure_skip_verify = true
cert = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
kubernetesprometheus.confをマウントするdatakit.yamlファイルのvolumeMountsに追加する
- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf
name: datakit-conf
subPath: kubernetesprometheus.conf
readOnly: true
- 次のコマンドを実行して datakit を再起動する
メトリクス¶
kube-state-metrics メトリクスセット¶
kube-state-metrics が収集するメトリクスは kube-state-metrics メトリクスセットにあります。ここではメトリクスの関連説明を紹介します
| Metrics | 説明 | 単位 |
|---|---|---|
kube_configmap_created |
ConfigMap リソースの作成時刻 |
s |
kube_cronjob_created |
CronJob リソースの作成時刻 |
s |
kube_cronjob_next_schedule_time |
CronJob の次回予定実行時刻 |
s |
kube_cronjob_spec_failed_job_history_limit |
CronJob 仕様における失敗ジョブ履歴の上限数 |
count |
kube_cronjob_spec_successful_job_history_limit |
CronJob 仕様における成功ジョブ履歴の上限数 |
count |
kube_cronjob_spec_suspend |
CronJob が停止されているかどうか |
boolean |
kube_cronjob_status_active |
CronJob の現在のアクティブジョブ数 |
count |
kube_cronjob_status_last_schedule_time |
CronJob の最終スケジュール時刻 |
s |
kube_cronjob_status_last_successful_time |
CronJob の最終成功実行時刻 |
s |
kube_daemonset_created |
DaemonSet リソースの作成時刻 |
s |
kube_daemonset_metadata_generation |
DaemonSet メタデータの世代番号 |
count |
kube_daemonset_status_current_number_scheduled |
現在スケジュール済みの DaemonSet 数 |
count |
kube_daemonset_status_desired_number_scheduled |
スケジュール予定の DaemonSet 数 |
count |
kube_daemonset_status_number_available |
利用可能な DaemonSet 数 |
count |
kube_daemonset_status_number_misscheduled |
スケジュール不一致の DaemonSet 数 |
count |
kube_daemonset_status_number_ready |
Ready の DaemonSet 数 |
count |
kube_daemonset_status_number_unavailable |
利用不可の DaemonSet 数 |
count |
kube_daemonset_status_observed_generation |
観測された DaemonSet の世代 |
count |
kube_daemonset_status_updated_number_scheduled |
更新済みの DaemonSet 数 |
count |
kube_deployment_created |
Deployment リソースの作成時刻 |
s |
kube_deployment_metadata_generation |
Deployment メタデータの世代番号 |
count |
kube_deployment_spec_paused |
Deployment が一時停止されているかどうか |
boolean |
kube_deployment_spec_replicas |
Deployment 仕様で期待されるレプリカ数 |
count |
kube_deployment_spec_strategy_rollingupdate_max_surge |
Deployment のローリング更新戦略における最大追加レプリカ数 |
count |
kube_deployment_spec_strategy_rollingupdate_max_unavailable |
Deployment のローリング更新戦略における最大利用不可レプリカ数 |
count |
kube_deployment_status_observed_generation |
観測された Deployment の世代 |
count |
kube_deployment_status_replicas |
Deployment の現在のレプリカ数 |
count |
kube_deployment_status_replicas_available |
Deployment の現在の利用可能レプリカ数 |
count |
kube_deployment_status_replicas_ready |
Deployment の現在の Ready レプリカ数 |
count |
kube_deployment_status_replicas_unavailable |
Deployment の現在の利用不可レプリカ数 |
count |
kube_deployment_status_replicas_updated |
Deployment の現在の更新済みレプリカ数 |
count |
kube_endpoint_address_available |
利用可能な Endpoint アドレス数 |
count |
kube_endpoint_address_not_ready |
未 Ready の Endpoint アドレス数 |
count |
kube_endpoint_created |
Endpoint リソースの作成時刻 |
s |
kube_endpoint_info |
Endpoint リソースの詳細情報 |
- |
kube_endpoint_ports |
Endpoint のポート情報 |
- |
kube_ingress_created |
Ingress リソースの作成時刻 |
s |
kube_ingress_info |
Ingress リソースの詳細情報 |
-s |
kube_ingress_metadata_resource_version |
Ingress リソースのバージョン番号 |
count |
kube_ingress_path |
Ingress のパス情報 |
- |
kube_job_complete |
Job が完了しているかどうか |
boolean |
kube_job_created |
Job リソースの作成時刻 |
s |
kube_job_info |
Job リソースの詳細情報 |
- |
kube_job_spec_completions |
Job 仕様で期待される完了作業数 |
count |
kube_job_spec_parallelism |
Job 仕様で期待される並列作業数 |
count |
kube_job_status_active |
Job の現在のアクティブ作業数 |
count |
kube_job_status_completion_time |
Job の完了時刻 |
s |
kube_job_status_failed |
Job の失敗作業数 |
count |
kube_job_status_start_time |
Job の開始時刻 |
s |
kube_job_status_succeeded |
Job の成功作業数 |
count |
kube_lease_renew_time |
Lease の更新時刻 |
s |
kube_namespace_created |
Namespace リソースの作成時刻 |
s |
kube_namespace_status_phase |
Namespace のステータスフェーズ |
count |
kube_networkpolicy_created |
NetworkPolicy リソースの作成時刻 |
s |
kube_networkpolicy_spec_egress_rules |
NetworkPolicy 仕様における送信ルール数 |
count |
kube_networkpolicy_spec_ingress_rules |
NetworkPolicy 仕様における受信ルール数 |
count |
kube_node_created |
Node リソースの作成時刻 |
s |
kube_node_spec_unschedulable |
Node がスケジュール不可かどうか |
boolean |
kube_node_status_addresses |
Node のステータスアドレス情報 |
count |
kube_node_status_capacity |
Node の容量情報 |
count |
kube_node_status_condition |
Node のステータス条件 |
count |
kube_persistentvolume_capacity_bytes |
PersistentVolume の容量 |
byte |
kube_persistentvolume_created |
PersistentVolume リソースの作成時刻 |
s |
kube_persistentvolume_info |
PersistentVolume リソースの詳細情報 |
count |
kube_persistentvolumeclaim_created |
PersistentVolumeClaim リソースの作成時刻 |
s |
kube_persistentvolumeclaim_resource_requests_storage_bytes |
PersistentVolumeClaim が要求するストレージリソース |
byte |
kube_pod_completion_time |
Pod の完了時刻 |
s |
kube_pod_container_state_started |
Pod 内のコンテナが起動済みかどうか |
boolean |
kube_pod_container_status_last_terminated_exitcode |
Pod 内コンテナの直近終了時の exit code |
count |
kube_pod_container_status_last_terminated_timestamp |
Pod 内コンテナの直近終了タイムスタンプ |
s |
kube_pod_container_status_ready |
Pod 内のコンテナが Ready かどうか |
boolean |
kube_pod_container_status_restarts_total |
Pod 内コンテナの累計再起動回数 |
count |
kube_pod_container_status_running |
Pod 内のコンテナが実行中かどうか |
boolean |
kube_pod_container_status_terminated |
Pod 内のコンテナが終了済みかどうか |
boolean |
kube_pod_container_status_waiting |
Pod 内のコンテナが待機中かどうか |
boolean |
kube_pod_created |
Pod リソースの作成時刻 |
s |
kube_pod_deletion_timestamp |
Pod リソースの削除タイムスタンプ |
s |
kube_pod_init_container_status_ready |
Pod の初期化コンテナが Ready かどうか |
boolean |
kube_pod_init_container_status_restarts_total |
Pod 初期化コンテナの累計再起動回数 |
count |
kube_pod_init_container_status_running |
Pod 初期化コンテナが実行中かどうか |
boolean |
kube_pod_init_container_status_terminated |
Pod 初期化コンテナが終了済みかどうか |
boolean |
kube_pod_init_container_status_waiting |
Pod 初期化コンテナが待機中かどうか |
boolean |
kube_pod_spec_volumes_persistentvolumeclaims_readonly |
Pod 仕様における PersistentVolumeClaim が読み取り専用かどうか |
boolean |
kube_pod_start_time |
Pod の開始時刻 |
s |
kube_pod_status_container_ready_time |
Pod 内コンテナが Ready になった時刻 |
s |
kube_pod_status_initialized_time |
Pod の初期化完了時刻 |
s |
kube_pod_status_ready |
Pod が Ready かどうか |
boolean |
kube_pod_status_ready_time |
Pod が Ready になった時刻 |
s |
kube_pod_status_scheduled |
Pod がスケジュール済みかどうか |
boolean |
kube_poddisruptionbudget_status_current_healthy |
PodDisruptionBudget の現在の健全な Pod 数 |
count |
kube_poddisruptionbudget_status_desired_healthy |
PodDisruptionBudget が期待する健全な Pod 数 |
count |
kube_poddisruptionbudget_status_expected_pods |
PodDisruptionBudget が期待する Pod 数 |
count |
kube_poddisruptionbudget_status_observed_generation |
PodDisruptionBudget の観測済み世代 |
count |
kube_poddisruptionbudget_status_pod_disruptions_allowed |
PodDisruptionBudget で許可される Pod 中断数 |
count |
kube_replicaset_created |
ReplicaSet リソースの作成時刻 |
s |
kube_replicaset_spec_replicas |
ReplicaSet 仕様で期待されるレプリカ数 |
count |
kube_replicaset_status_fully_labeled_replicas |
ReplicaSet の完全ラベル付きレプリカ数 |
count |
kube_replicaset_status_observed_generation |
ReplicaSet の観測済み世代 |
count |
kube_replicaset_status_ready_replicas |
ReplicaSet の Ready レプリカ数 |
count |
kube_replicaset_status_replicas |
ReplicaSet の現在のレプリカ数 |
count |
kube_secret_created |
Secret リソースの作成時刻 |
s |
kube_service_created |
Service リソースの作成時刻 |
s |
kube_statefulset_created |
StatefulSet リソースの作成時刻 |
s |
kube_statefulset_replicas |
ReplicaSet の現在のレプリカ数 |
count |
kube_statefulset_status_observed_generation |
StatefulSet の観測済み世代 |
count |
kube_statefulset_status_replicas |
StatefulSet の現在のレプリカ数 |
count |
kube_statefulset_status_replicas_available |
StatefulSet の利用可能レプリカ数 |
count |
kube_statefulset_status_replicas_current |
ReplicaSet の現在のレプリカ数 |
count |
kube_statefulset_status_replicas_ready |
StatefulSet の Ready レプリカ数 |
count |
kube_statefulset_status_replicas_updated |
StatefulSet の更新済みレプリカ数 |
count |
kube_storageclass_created |
StorageClass リソースの作成時刻 |
s |