You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kubernetes Client-Java API获取所有Deployment及Pod数量?

获取所有Deployment并查看Pod状态(Java Kubernetes Client)

刚好我之前用这个库做过类似需求,给你一步步拆解怎么实现和kubectl get deployments完全对应的功能:

1. 核心API调用

要获取集群中所有Deployment,你需要用到客户端的apps().deployments().list()方法——这个方法会返回所有命名空间(也可以指定单个命名空间)的Deployment资源集合,完全对应kubectl get deployments的查询范围。

2. 字段对应关系(和kubectl输出对齐)

kubectl里的每一列,都能从Deployment对象的对应字段拿到:

  • DESIRED: spec.getReplicas()(你配置的期望Pod副本数)
  • CURRENT: status.getReplicas()(当前实际运行的Pod总数)
  • UP-TO-DATE: status.getUpdatedReplicas()(已经更新到最新版本的Pod数量)
  • AVAILABLE: status.getAvailableReplicas()(处于可用状态的Pod数量)
  • AGE: 从metadata.getCreationTimestamp计算到当前的时间差

3. 完整代码示例

首先确保项目引入了Java Kubernetes Client依赖(以Maven为例):

<dependency>
    <groupId>io.kubernetes</groupId>
    <artifactId>client-java</artifactId>
    <version>替换成你用的版本,比如19.0.0</version>
</dependency>

然后是具体实现代码:

import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.AppsV1Api;
import io.kubernetes.client.openapi.models.V1Deployment;
import io.kubernetes.client.openapi.models.V1DeploymentList;
import io.kubernetes.client.util.ClientBuilder;
import io.kubernetes.client.util.KubeConfig;

import java.io.FileReader;
import java.io.IOException;
import java.time.Duration;
import java.time.ZonedDateTime;

public class DeploymentLister {
    public static void main(String[] args) throws IOException, ApiException {
        // 本地开发加载kubeconfig,集群内运行直接用InClusterConfig
        String kubeConfigPath = System.getenv("HOME") + "/.kube/config";
        ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build();
        Configuration.setDefaultApiClient(client);

        AppsV1Api appsApi = new AppsV1Api();
        // 查询所有命名空间的Deployment,指定命名空间用listNamespacedDeployment("your-namespace", ...)
        V1DeploymentList deploymentList = appsApi.listDeploymentForAllNamespaces(null, null, null, null, null, null, null, null, null);

        // 打印和kubectl一致的表头
        System.out.printf("%-15s %-8s %-8s %-12s %-10s %-5s%n", "NAME", "DESIRED", "CURRENT", "UP-TO-DATE", "AVAILABLE", "AGE");

        for (V1Deployment deployment : deploymentList.getItems()) {
            String name = deployment.getMetadata().getName();
            Integer desired = deployment.getSpec().getReplicas();
            // 注意处理status为空的情况(比如刚创建的Deployment还没生成状态)
            Integer current = deployment.getStatus() != null ? deployment.getStatus().getReplicas() : 0;
            Integer upToDate = deployment.getStatus() != null ? deployment.getStatus().getUpdatedReplicas() : 0;
            Integer available = deployment.getStatus() != null ? deployment.getStatus().getAvailableReplicas() : 0;
            // 计算AGE,简化为天数显示,也可以细化到时分秒
            ZonedDateTime creationTime = deployment.getMetadata().getCreationTimestamp();
            Duration age = Duration.between(creationTime, ZonedDateTime.now());
            String ageStr = String.format("%dd", age.toDays());

            // 打印每行数据,保持格式对齐
            System.out.printf("%-15s %-8d %-8d %-12d %-10d %-5s%n", name, desired, current, upToDate, available, ageStr);
        }
    }
}

小提示

  • 如果是在Kubernetes集群内部运行应用,不需要加载kubeconfig,直接用ClientBuilder.cluster().build()创建客户端即可。
  • 可以通过listDeploymentForAllNamespaces的参数添加过滤条件,比如按标签筛选Deployment。

内容的提问来源于stack exchange,提问作者BlueChips23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:47:38