kubernetes 容器内获取Pod信息(包括:宿主主机IP)

kubernetes 自从1.7开始,可以在pod 的container 内获取pod的spec,metadata 等信息。

具体方法可以通过env获取:

      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName

spec.nodeName : pod所在节点的IP、宿主主机IP

status.podIP :pod IP

metadata.namespace : pod 所在的namespace

更多参数:https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/

https://github.com/kubernetes/kubernetes/issues/24657

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要使用kubernetes-client java获取pod容器内存与CPU使用率,可以按照以下步骤进行操作。 首先,你需要在Java项目中添加kubernetes-client的依赖,例如在pom.xml文件中添加以下代码: ```xml <dependencies> <dependency> <groupId>io.kubernetes</groupId> <artifactId>client-java</artifactId> <version>9.0.0</version> </dependency> </dependencies> ``` 接下来,你可以使用以下代码获取pod的相关信息: ```java import io.kubernetes.client.apis.CoreV1Api; import io.kubernetes.client.custom.Quantity; import io.kubernetes.client.models.V1Container; import io.kubernetes.client.models.V1ContainerStatus; import io.kubernetes.client.models.V1NamespaceList; import io.kubernetes.client.models.V1Pod; import io.kubernetes.client.models.V1PodList; import io.kubernetes.client.models.V1PodMetrics; import io.kubernetes.client.models.V1PodMetricsList; import io.kubernetes.client.util.Config; import java.util.Map; public class KubernetesClientExample { public static void main(String[] args) throws Exception { // 创建Kubernetes客户端 io.kubernetes.client.Configuration config = Config.defaultClientConfig(); io.kubernetes.client.apis.CoreV1Api api = new CoreV1Api(); // 获取pod列表 V1PodList podList = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null); for (V1Pod pod : podList.getItems()) { // 获取pod所属的命名空间和名称 String namespace = pod.getMetadata().getNamespace(); String name = pod.getMetadata().getName(); // 获取pod容器列表和相关状态信息 for (V1Container container : pod.getSpec().getContainers()) { String containerName = container.getName(); V1ContainerStatus containerStatus = pod.getStatus().getContainerStatuses().stream() .filter(status -> status.getName().equals(containerName)) .findFirst().orElse(null); if (containerStatus != null) { // 获取容器的CPU和内存使用率 Map<String, Quantity> usage = containerStatus.getUsage(); Quantity cpuUsage = usage.get("cpu"); Quantity memoryUsage = usage.get("memory"); System.out.println("Namespace: " + namespace + ", Pod: " + name + ", Container: " + containerName + ", CPU Usage: " + cpuUsage + ", Memory Usage: " + memoryUsage); } } } } } ``` 上述代码中,我们首先创建了Kubernetes的客户端,然后通过CoreV1Api实例来获取pod列表。对于每个pod,我们遍历其容器列表,并获取容器的名称以及相关状态信息。在状态信息中,我们可以找到容器的CPU和内存使用率,以及其他相关指标。 需要注意的是,这里获取的是当前时刻的使用率数据,如果你想要定时获取容器的使用率信息,可以使用定时任务等方法来实现。 这是一个简单的示例,你可以根据实际需求和项目结构进行相应的扩展和修改。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值