【k8s系列】(202212) kube-state-metrics中kube_endpoint_address指标

背景

需要一个指标来告警k8s中endpoints中没有ip的项

类似于下面图中,有些ep是没有ip的,想要把这些项及时告警,及时处理查看原因

image.png

可以看到,总共有7个ep,有4个是正常的,有3个是异常的(kube-dns、kubernetes-dashboard和metrics-server)

环境

kube-state-metrics版本:v2.6.0

操作

1
2
3
4
5
6
7
8
# HELP kube_endpoint_address_available (Deprecated since v2.6.0) Number of addresses available in endpoint.
# TYPE kube_endpoint_address_available gauge

# HELP kube_endpoint_address_not_ready (Deprecated since v2.6.0) Number of addresses not ready in endpoint
# TYPE kube_endpoint_address_not_ready gauge

# HELP kube_endpoint_address Information about Endpoint available and non available addresses.
# TYPE kube_endpoint_address gauge

方法1:kube_endpoint_address_not_ready选择大于0的

总共有7条,大于0的就是异常的

image.png

进而,我们可以看到,kube-dns显示的是3,而kubernetes-dashboard和metrics-server显示的是1,这个是为什么呢?

验证方式1

通过标题背景中的图片可以看到,ep中显示的是ip:port,我们可以看下这几个ep的具体细节:
如下图,kube-dns有1个ip,3个端口;kubernetes-dashboard有1个ip,1个端口;metrics-server有1个ip,1个端口

image.png

image.png

image.png

验证方式2

我们找来另一个集群k2,部署方式和k是一样的。
查看k2的这3个ep,可以看到分别是3、1、1.

image.png

方法2:kube_endpoint_address_available选等于0的

总共有7条,等于0的就是异常的

image.png

nginx那为什么显示的是3呢?
查看该集群,可以看到nginx下面有3项

image.png

方法3:kube_endpoint_address{ready=”false”}选大于0的

因为选择的是ready=”false”,所以显示出来的就是异常的

image.png

我们再选择一下ready=”true”
可以看到有6项,这是为什么呢?
仔细一看,kube_endpoint_address指标加入了ip的label,nginx因为有3个ip,所以被拆成了3项

image.png

解释

v2.6.0加入了新的指标kube_endpoint_address
详情参考:https://github.com/kubernetes/kube-state-metrics/releases

image.png

我们跳到1761,可以看到kube_endpoint_address将替代kube_endpoint_address_available和kube_endpoint_address_not_ready,所以用2.6.0采集出来的指标,显示kube_endpoint_address_available和kube_endpoint_address_not_ready Deprecated since v2.6.0呢

详情见:https://github.com/kubernetes/kube-state-metrics/pull/1761

image.png

结束~

====2023.2.7 更新====

kube_endpoint_address 实验1:正常情况

image.png

image.png

普罗

查询ready=”false”的条数,一条都没有。
image.png

查询ready=”true”的条数,总共有9条,此处所有的pod都是正常的。
image.png

这9条数据是怎么和pod、ep所对应的呢?

kubernetes有1条
nginx有3条,对应ep中的3项,3个ip
kube-dns中有1条,对应ep中的3项,1个ip
metrics-server有1条
metrics-server-proxy有1条
dashboard-metrics-scraper有1条
kubernetes-dashboard有1条

ep

看一下这几个ep的详细信息:

image.png

Addresses有3条,普罗那显示了3条

image.png

Addresses有1条,普罗那显示了1条

kube_endpoint_address 实验2:某一个pod掉线(pod有ip)

场景

修改nginx的一个pod,更改其镜像,使其宕掉

image.png

image.png

可以看到nginx处的ep由3个变成了2个

普罗

此时普罗中 ready=”true”的nginx变成了2条

image.png

普罗中 ready=”false”的nginx有了1条
image.png

ep

再看nginx的ep:

image.png

image.png

Addresses有2条,普罗那ready=true显示了2条
NotReadyAddresses有1条,普罗那ready=false显示了1条

kube_endpoint_address 实验3:pod异常(pod无ip)

场景

场景:当k8s的网络插件有问题时,会导致pod分不到ip

image.png

image.png

普罗

此时普罗中 ready=”true”总共有6条,没有nginx相关的了

image.png

普罗中 ready=”false”的没有数据了
image.png

所以,该指标(kube_endpoint_address)是检测不到这种异常场景的~

ep

image.png

image.png

源码剖析

参考:https://github.com/kubernetes/kube-state-metrics/blob/main/internal/store/endpoint.go

kube_endpoint_address_available

image.png

kube_endpoint_address_not_ready

image.png

kube_endpoint_address

image.png

寄语:你走的每一步都算数!

参考

https://github.com/kubernetes/kube-state-metrics/releases
https://github.com/kubernetes/kube-state-metrics/pull/1761


【k8s系列】(202212) kube-state-metrics中kube_endpoint_address指标
http://example.com/2022/12/27/k8s/【k8s系列】(202212) kube-state-metrics中kube_endpoint_address指标/
作者
ningan123
发布于
2022年12月27日
许可协议