kube-state-metrics 指标数据
kube-state-metrics关注于获取k8s各种资源的最新状态,如deployment或者daemonset,之所以没有把kube-state-metrics纳入到metric-server的能力中,是因为他们的关注点本质上是不一样的。metric-server仅仅是获取、格式化现有数据,写入特定的存储,实质上是一个监控系统。而kube-state-metrics是将k8s的运行状况在内存中做了个快照,并且获取新的指标,但他没有能力导出这些指标。
PromQL语句:
kube_node_info{instance="10.42.4.65:8080"}
说明:可以查询到K8S集群对应多少Node节点,可以和实际的节点数比较告警,也可以制作大屏
PromQL语句:
kube_node_status_condition{condition="Ready",status!="true"}==1
说明:监控集群节点状态是否错误,如何值是1就是有错误可以告警
PromQL语句:
kube_node_status_condition{condition="Ready",status="true"} == 0
说明:监控集群节点状态是否准备好,有点像kubectl get node获取的状态
PromQL语句:
kube_node_status_condition{condition=~"OutOfDisk|MemoryPressure|DiskPressure",status!="false"}==1
PromQL语句:
kube_persistentvolumeclaim_status_phase{phase="Failed"}==1
PromQL语句:
kube_pod_status_phase{phase=~"Failed|Unknown"}==1
PromQL语句:
changes(kube_pod_container_status_restarts_total[30m])
PromQL语句:
sum(kube_pod_container_resource_requests_cpu_cores{})
说明:监控容器请求的CPU内核数
PromQL语句:
sum(kube_pod_container_resource_limits_cpu_cores{})
PromQL语句:
sum(kube_node_status_capacity_cpu_cores{})
PromQL语句:
sum(kube_pod_container_resource_requests_memory_bytes{})/1024/1024/1024
PromQL语句:
sum(kube_pod_container_resource_limits_memory_bytes{})
PromQL语句:
sum(kube_node_status_capacity_memory_bytes{}/1024/1024/1024)
PromQL语句:
sum(kube_node_spec_unschedulable{node=~"$node"})
PromQL语句:
kube_pod_status_phase{phase=~"Pending|Running"} == 1
说明:kube_pod_status_phase可以统计Pod的数量,phase的值:Running(运行中)Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。官网对Pod 的生命周期说明:
https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/
PromQL语句:
sum(kube_pod_status_phase{namespace=~".*", phase="Pending"}==1)
说明:监控悬决的Pods数量;Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间
PromQL语句:
sum(kube_pod_status_phase{namespace=~".*", phase="Failed"}==1)
说明:监控成功终止的Pods数量;Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止
PromQL语句:
sum(kube_pod_status_phase{namespace=~".*", phase="Succeeded"}==1)
说明:监控成功终止的Pods数量;Pod 中的所有容器都已成功终止,并且不会再重启
PromQL语句:
sum(kube_pod_status_phase{namespace=~".*", phase="Unknown"}==1)
说明:监控未知的Pods数量;因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败
PromQL语句:
kube_pod_container_status_running{namespace=~".*"}==1
说明:监控正在运行容器数量;可以绘制K8S集群的容器数量
PromQL语句:
kube_pod_container_status_waiting{namespace=~".*"}==1
说明:监控K8S等待创建的容器;可以监控容器
PromQL语句:
kube_pod_container_status_terminated{namespace=~".*"}==1
说明:监控K8S停止的容器;可以监控容器
PromQL语句:
sum(kube_job_status_succeeded{namespace=~".*"})
说明:监控作业中心成功数;可以监控作业执行的成功数
PromQL语句:
sum(kube_deployment_status_replicas{namespace=~".*"})
说明:kube_deployment_status_replicas 表示每个部署的副本数,这值是Status.Replicas;
kube_deployment_spec_replicas表示部署所需的吊舱数。这值是Spec.Replicas资源定义副本数
kube_deployment_status_replicas_available 正在运行副本数
kube_deployment_status_replicas_updated 更新的副本数
kube_deployment_status_replicas_unavailable 不可用的副本数
PromQL语句:
(sum (node_filesystem_size_bytes{nodename=~".*"}) - sum (node_filesystem_free_bytes{nodename=~".*"})) / sum (node_filesystem_size_bytes{nodename=~".*"})
说明:监控K8S集群磁盘使用率
PromQL语句:
kubelet_volume_stats_available_bytes / kubelet_volume_stats_capacity_bytes * 100 < 10
说明:监控K8S监控磁盘卷可用空间的,小于10就告警
PromQL语句:
predict_linear(kubelet_volume_stats_available_bytes[1h], 7 * 24 * 3600) < 0
说明:监控K8S集群监控预测磁盘卷7天是否满,小于0就告警
PromQL语句:
kube_persistentvolume_status_phase{phase=~"Failed|Pending"} > 0
说明:监控K8S集群监控PV使用状态,大于0就告警
PromQL语句:
(kube_statefulset_status_replicas_ready / kube_statefulset_status_replicas_current) != 1
说明:监控K8S集群StatefulSet是否down,不于1就告警
PromQL语句:
(sum(kube_hpa_status_condition{condition="ScalingLimited",status="true"}) by (hpa,namespace)) == 1
说明:监控K8S集群HPA动态伸缩异常,等于1就告警
PromQL语句:
rate(kube_pod_container_status_restarts_total[5m]) * 60 * 5 >2
说明:监控K8S集群监控当前5分钟POD重启的次数,大于2就告警
PromQL语句:
kube_replicaset_spec_replicas != kube_replicaset_status_ready_replicas
说明:监控K8S集群集群监控replicaset副本数状态,不等异常
同理:
kube_deployment_spec_replicas != kube_deployment_status_replicas_available
kube_statefulset_status_replicas_ready != kube_statefulset_status_replicas
kube_deployment_status_observed_generation != kube_deployment_metadata_generation
kube_statefulset_status_observed_generation != kube_statefulset_metadata_generation