【k8s系列】(202212) kube-state-metrics中kube_endpoint_address指标
背景
需要一个指标来告警k8s中endpoints中没有ip的项
类似于下面图中,有些ep是没有ip的,想要把这些项及时告警,及时处理查看原因
可以看到,总共有7个ep,有4个是正常的,有3个是异常的(kube-dns、kubernetes-dashboard和metrics-server)
环境
kube-state-metrics版本:v2.6.0
操作
1 |
|
方法1:kube_endpoint_address_not_ready选择大于0的
总共有7条,大于0的就是异常的
进而,我们可以看到,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个端口
验证方式2
我们找来另一个集群k2,部署方式和k是一样的。
查看k2的这3个ep,可以看到分别是3、1、1.
方法2:kube_endpoint_address_available选等于0的
总共有7条,等于0的就是异常的
nginx那为什么显示的是3呢?
查看该集群,可以看到nginx下面有3项
方法3:kube_endpoint_address{ready=”false”}选大于0的
因为选择的是ready=”false”,所以显示出来的就是异常的
我们再选择一下ready=”true”
可以看到有6项,这是为什么呢?
仔细一看,kube_endpoint_address指标加入了ip的label,nginx因为有3个ip,所以被拆成了3项
解释
v2.6.0加入了新的指标kube_endpoint_address
详情参考:https://github.com/kubernetes/kube-state-metrics/releases
我们跳到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
结束~
====2023.2.7 更新====
kube_endpoint_address 实验1:正常情况
普罗
查询ready=”false”的条数,一条都没有。
查询ready=”true”的条数,总共有9条,此处所有的pod都是正常的。
这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的详细信息:
Addresses有3条,普罗那显示了3条
Addresses有1条,普罗那显示了1条
kube_endpoint_address 实验2:某一个pod掉线(pod有ip)
场景
修改nginx的一个pod,更改其镜像,使其宕掉
可以看到nginx处的ep由3个变成了2个
普罗
此时普罗中 ready=”true”的nginx变成了2条
普罗中 ready=”false”的nginx有了1条
ep
再看nginx的ep:
Addresses有2条,普罗那ready=true显示了2条
NotReadyAddresses有1条,普罗那ready=false显示了1条
kube_endpoint_address 实验3:pod异常(pod无ip)
场景
场景:当k8s的网络插件有问题时,会导致pod分不到ip
普罗
此时普罗中 ready=”true”总共有6条,没有nginx相关的了
普罗中 ready=”false”的没有数据了
所以,该指标(kube_endpoint_address)是检测不到这种异常场景的~
ep
源码剖析
参考:https://github.com/kubernetes/kube-state-metrics/blob/main/internal/store/endpoint.go
kube_endpoint_address_available
kube_endpoint_address_not_ready
kube_endpoint_address
寄语:你走的每一步都算数!
参考
https://github.com/kubernetes/kube-state-metrics/releases
https://github.com/kubernetes/kube-state-metrics/pull/1761