kubernetes 如何检查Pod与IP实际上是活的从另一个Pod?

7vux5j2d  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(129)

我们部署了一个带有度量作业的Java应用程序,它等待同一名称空间中的客户端应用程序通过http端点推送它们的度量。因此,我们将pod ip地址附加到客户端的指标中,并将其存储起来,以便稍后报告。我们现在正在努力解决的问题是,因为pod不是有状态的,在某些时候pod不可用或死亡,他们用一个新的IP地址重新启动。这意味着我们应该处理旧pod的陈旧指标,该指标由陈旧pod IP标识。我们希望在metrics应用程序中创建一个预定的作业,以遍历所有metrics并检查附加到它们的IP地址,并处理不指向任何可用pod的陈旧metrics。是否有一种方法可以查询具有IP地址的Pod是否可用或存在于另一个Pod中?
实际上,我们不知道什么样的客户端将指标推送到指标端点。在同一命名空间中部署了从nodejs到Java应用程序的各种应用程序。所以我们不能从数据中提取指标。Kubernetes客户端库现在还不是一个可行的选择,因为我们所处的环境迫使我们避免对Kubernetes API服务器进行HTTP调用。

3zwtqj6y

3zwtqj6y1#

我需要一种简单的方法来知道一个IP地址是否可以解析为一个活跃的pod,该IP地址被附加到我用Java编写的metrics服务中存储的metrics。幸运的是,在Java中编程很容易。
示例:我有一个来自客户服务的交易计数指标。with cluster ip trx_count{app="10-187-79-75-frictionless-symphony-service"}只需将10-187-79-75解析为正确的IP表示,如10.187.79.75,然后在我们的指标服务中编写以下代码

public String getHostName(String ipAddr) throws UnknownHostException {
    return Inet4Address.getByName(ipAddr).getHostName();
}

如果该IP Pod不可用,则getHostName方法返回的字符串不是主机名,而是与作为参数传递的IP地址完全相同的IP地址。

private boolean isMetricStale(){
var hostName = getHostName(podIp);
if (podIp.equals(hostName))
       return true;
else
       return false;
}

相关问题