如何在 Kubernetes Java 应用程序中获取当前 Pod

SID*_*SID 12 java spring-boot kubernetes

我正在 Kubernetes 集群上部署我的微服务。每个应用程序都有 4 个副本或 PODS。对于 1 个应用程序中的 REST API,我想跟踪哪个 POD 解决了我的请求。例如,我的/app/deploy(body contains app_id)请求由POD1.

同样,我在我的应用程序中导入了 Kubernetes jar。在我的代码中,我想检查运行此代码的当前 POD。我想要一个像这样的 API kubernetesDiscoveryClient.getCurrentPOD()

Blo*_*ock 15

您的 Java 应用程序中不需要 Kubernetes Jar。一个简单的System.getenv("HOSTNAME")会给你你的 Pod 的名称。适用于所有平台,至少从 Kubernetes 1.6 版开始。

更正式地,您可以在您的 Kube 规范(详细参考)中使用以下内容,然后阅读System.getenv("MY_POD_NAME")Java 中使用的环境。

 env:
 - name: MY_POD_NAME
   valueFrom:
     fieldRef:
       fieldPath: metadata.name     
Run Code Online (Sandbox Code Playgroud)


SID*_*SID 6

这对我有用。

podName = Optional.ofNullable(System.getenv("HOSTNAME"));
Run Code Online (Sandbox Code Playgroud)


Sum*_*mit 5

每个 pod 都有一个hostname相同的pod_name. 所以你可以做的是,编写一个返回你的api hostname

例子:

在 Java 中 java.net.InetAddress.getLocalHost();

在 C# 中 System.Environment.GetEnvironmentVariable("COMPUTERNAME");