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

是否有GKE REST API可获取指定命名空间Deployment镜像名?Java如何实现?

1. 是否存在与指定kubectl命令输出一致的GKE REST API?

当然有。Kubernetes(包括GKE)的原生REST API完全支持这类查询,你可以直接调用对应端点并通过参数筛选数据,效果和你给出的kubectl命令完全一致。

具体来说,你需要调用命名空间dev下的Deployment列表API:

  • API端点:/apis/apps/v1/namespaces/dev/deployments
  • 请求方法:GET

要实现custom-columns指定的字段筛选,只需在请求中添加fields查询参数,值为:items.metadata.name,items.spec.template.spec.containers.image,这样API只会返回你需要的两个字段数据。

另外,你可以给原kubectl命令加上-v=6参数,查看它底层实际调用的API请求详情,比如:

kubectl get deployment -o=json --namespace dev --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.template.spec.containers[*].image" -v=6

2. Java程序读取该数据的实现步骤

推荐使用官方的Kubernetes Java Client,它封装了REST API的认证、序列化、请求处理等逻辑,不用自己从零搭建HTTP请求,步骤如下:

第一步:引入依赖

如果用Maven,在pom.xml中添加客户端依赖(替换为最新稳定版本):

<dependency>
    <groupId>io.kubernetes</groupId>
    <artifactId>client-java</artifactId>
    <version>19.0.0</version>
</dependency>

第二步:配置并初始化客户端

客户端会自动加载本地Kubeconfig文件(路径~/.kube/config);如果是在GKE集群内运行的Java程序,会自动使用集群内的服务账号认证;外部调用的话,先通过gcloud container clusters get-credentials命令生成GKE的Kubeconfig配置。

示例代码:

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.util.stream.Collectors;

public class GkeDeploymentFetcher {
    public static void main(String[] args) throws IOException, ApiException {
        // 加载本地Kubeconfig
        String kubeConfigPath = System.getProperty("user.home") + "/.kube/config";
        ApiClient apiClient = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build();
        Configuration.setDefaultApiClient(apiClient);

        // 初始化AppsV1 API客户端
        AppsV1Api appsApi = new AppsV1Api();
        // 调用API获取dev命名空间下的Deployment,指定返回字段
        V1DeploymentList deploymentList = appsApi.listNamespacedDeployment(
                "dev",
                null, null, null, null, null, null, null, null, null,
                "metadata.name,spec.template.spec.containers.image"
        );

        // 遍历输出结果,和kubectl命令格式对齐
        for (V1Deployment deployment : deploymentList.getItems()) {
            String deployName = deployment.getMetadata().getName();
            String images = deployment.getSpec().getTemplate().getSpec().getContainers().stream()
                    .map(container -> container.getImage())
                    .collect(Collectors.joining(", "));
            System.out.printf("NAME: %s, IMAGE: %s%n", deployName, images);
        }
    }
}

第三步:配置权限

确保使用的账号(Kubeconfig对应的账号或集群内服务账号)拥有deployments.get权限,在GKE中可以通过Role/ClusterRole和RoleBinding/ClusterRoleBinding来配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:25:14