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环境,然后通过浏览器访问验证:
总结
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}
网友评论