如何从另一个 pod 中检查具有 IP 的 pod 是否确实处于活动状态?

问题描述 投票:0回答:1

我们部署了一个带有指标作业的 Java 应用程序,该应用程序等待同一命名空间中的客户端应用程序使用 http 端点推送其指标。我们需要某种方法来唯一标识每个客户端的指标。因此,我们将 pod IP 地址附加到客户端的指标中,并将它们存储起来以便稍后报告。我们现在正在努力解决的是,因为 Pod 没有状态,并且在某些时候 Pod 不可用或死亡,并且它们会使用新的 IP 地址重新启动。这意味着我们应该处理由过时 pod IP 标识的旧 pod 的过时指标。我们希望在指标应用程序中创建一个计划作业,以遍历所有指标并检查附加到它们的 IP 地址,并处理不指向任何可用 pod 的陈旧指标。有没有办法可以查询具有 IP 地址的 Pod 是否可用或是否存在于另一个 Pod 中?

我们实际上不知道什么样的客户端将指标推送到指标端点。在同一命名空间中部署了从 Nodejs 到 Java 应用程序的各种应用程序。所以我们不能从它们中获取指标。 Kubernetes 客户端库现在不是一个可行的选择,因为我们处于一个被迫避免对 kubernetes api 服务器进行 HTTP 调用的环境中。

kubernetes openshift kubectl coredns
1个回答
0
投票

我需要一种简单的方法来了解附加到存储在用 Java 编写的指标服务中的指标的 IP 地址是否可以解析为活动的 pod。幸运的是,在 Java 中以编程方式很容易实现。

示例 我有一个来自我们客户服务之一的交易计数指标。带有集群 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 地址。

private boolean isMetricStale(){
var hostName = getHostName(podIp);
if (podIp.equals(hostName))
       return true;
else
       return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.