使用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
相关产品推荐
相关产品推荐

