使用Java调用 K8S API获取信息

2020-04-06  本文已影响0人  上岸的魚

k8s管理不仅提供了命令行工具,还提供了完整的rest api接口供用户使用,其dashboard就是基于该api接口实现的,我们可以通过这些api实现自定义的管理及监控等功能,本文我们使用java实现最基本的接口调用。

实现过程

配置文件
进入 master节点,导出k8s证书config文件

cd /root/.kube
sz config   #下载该文件

然后我们将文件改名为k8s.config,复制到java项目resource的config目录中供使用

java 引用
springboot pom文件中添加以下依赖:

        <dependency>
            <groupId>io.kubernetes</groupId>
            <artifactId>client-java</artifactId>
            <version>7.0.0</version>
            <scope>compile</scope>
        </dependency>

程序开发
新建一k8sController

@RequestMapping("/getPods")  
         public String getPods(){  
            try
            {
                 ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(k8sConfigFile))).build();               
                    Configuration.setDefaultApiClient(client);             
                    CoreV1Api api = new CoreV1Api();                
                    V1PodList list = api.listPodForAllNamespaces(null,null,null,null,null,null,null,null,null);
                    StringBuilder str = new StringBuilder();                    
                    for (V1Pod item : list.getItems()) {
                        str.append(item.toString());
                        str.append("\n");                  
                    }   
                    return str.toString();
            }
            catch(Exception ex) {
                log.error(ex.toString());
                return "Error:"+ex.getMessage();
            }            
         } 

部署验证
部署该程序到k8s环境,然后通过浏览器访问验证:

通过api获取k8s资源

总结

k8s的api提供几乎所有k8s的信息获取及操作,通过其api我们甚至可以自行开发一套管理平台,主动化+自动化+智能化是IT运维变革的方向,而传统的命令行模式支撑略有不足,API恰好弥补了这一短板,剩下的就要看内部开发及集成能力发挥的程度。

附相关接口地址

以下内容引用自https://www.jianshu.com/p/a25e9e613f2c

/api/v1/proxy/nodes/{name}/pods/    #列出指定节点内所有Pod的信息
/api/v1/proxy/nodes/{name}/stats/   #列出指定节点内物理资源的统计信息
/api/v1/prxoy/nodes/{name}/spec/    #列出指定节点的概要信息
/api/v1/proxy/nodes/{name}/run      #在节点上运行某个容器
/api/v1/proxy/nodes/{name}/exec     #在节点上的某个容器中运行某条命令
/api/v1/proxy/nodes/{name}/attach   #在节点上attach某个容器
/api/v1/proxy/nodes/{name}/portForward   #实现节点上的Pod端口转发
/api/v1/proxy/nodes/{name}/logs     #列出节点的各类日志信息
/api/v1/proxy/nodes/{name}/metrics  #列出和该节点相关的Metrics信息
/api/v1/proxy/nodes/{name}/runningpods  #列出节点内运行中的Pod信息
/api/v1/proxy/nodes/{name}/debug/pprof  #列出节点内当前web服务的状态,包括CPU和内存的使用情况
/api/v1/proxy/namespaces/{namespace}/pods/{name}/{path:*}      #访问pod的某个服务接口
/api/v1/proxy/namespaces/{namespace}/pods/{name}               #访问Pod
#以下写法不同,功能一样
/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path:*}      #访问pod的某个服务接口
/api/v1/namespaces/{namespace}/pods/{name}/proxy               #访问Pod
/api/v1/proxy/namespaces/{namespace}/services/{name}
上一篇 下一篇

猜你喜欢

热点阅读