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

使用fabric8 openshift-client获取集群所有资源(等同oc api-resources)的方法

适配Quarkus 2.3内置客户端的实现方案

Quarkus 2.3内置的fabric8 kubernetes/openshift-client属于5.4.x版本序列,确实没有上层封装的getApiResources方法,你可以直接复用客户端底层的请求封装能力,无需自己从零实现RestClient调用,代码示例如下:

import io.fabric8.kubernetes.api.model.APIResourceList;
import io.fabric8.kubernetes.client.dsl.base.OperationSupport;
import io.fabric8.openshift.client.DefaultOpenShiftClient;
import io.fabric8.openshift.client.OpenShiftClient;

public class ApiResourcesDemo {
    public static void main(String[] args) {
        OpenShiftClient client = new DefaultOpenShiftClient();

        // 处理非核心API组
        client.getApiGroups().getGroups().forEach(apiGroup -> {
            apiGroup.getVersions().forEach(groupVersionForDiscovery -> {
                String groupVersion = groupVersionForDiscovery.getGroupVersion();
                try {
                    APIResourceList resourceList = ((OperationSupport) client)
                            .restCall(APIResourceList.class, "/apis/" + groupVersion);
                    // 遍历输出该组下的所有资源
                    resourceList.getResources().forEach(apiResource -> {
                        System.out.printf("资源名: %s  短名: %s  命名空间级别: %s  Kind: %s%n",
                                apiResource.getName(),
                                String.join(",", apiResource.getShortNames()),
                                apiResource.getNamespaced(),
                                apiResource.getKind());
                    });
                } catch (Exception ignore) {
                    // 跳过无法访问的异常API组版本
                }
            });
        });

        // 单独处理core核心API组(对应/api/v1路径)
        APIResourceList coreResourceList = ((OperationSupport) client)
                .restCall(APIResourceList.class, "/api/v1");
        coreResourceList.getResources().forEach(apiResource -> {
            System.out.printf("资源名: %s  短名: %s  命名空间级别: %s  Kind: %s%n",
                    apiResource.getName(),
                    String.join(",", apiResource.getShortNames()),
                    apiResource.getNamespaced(),
                    apiResource.getKind());
        });
    }
}

该方案直接复用fabric8客户端已经实现的认证、序列化、TLS校验逻辑,比自行封装RestClient稳定性更高。

升级后的标准实现方案

如果后续可以升级Quarkus版本,将quarkus-kubernetes-client/quarkus-openshift-client升级到2.8.0及以上版本,对应的fabric8客户端为6.x+版本,官方已经上层封装了getApiResources方法,代码更简洁:

// 直接获取全集群所有API资源,等价oc api-resources命令效果
client.getApiResources().values().forEach(apiResource -> {
    // 自定义处理逻辑
});

// 也可以指定groupVersion获取对应分组下的资源
APIResourceList appsV1Resources = client.getApiResources("apps/v1");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:04