boot客户管理系统源码_K8S官方java客户端之三:外部应用
阅读原文时间:2021年04月26日阅读:1

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

概览

  • 以下提到的java客户端都是指client-jar.jar

  • 本文是《K8S官方java客户端》系列的第三篇,《K8S官方java客户端:准备》一文中咱们为实战做好了准备工作,从本文开始进入实战阶段;

  • 本文的目标是开发名为OutsideclusterApplication的SpringBoot应用,该应用没有部署在K8S环境,使用的config文件是手动从K8S环境复制过来的,java客户端通过此config文件,能够远程访问到K8S上的API Server,实现所有客户端功能,整体部署情况如下图:

介绍完毕,开始编码;

源码下载

如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示(
https://github.com/zq2599/blog_demos):

  • 这个git项目中有多个文件夹,《K8S官方java客户端》系列的源码在kubernetesclient文件夹下,如下图红框所示:

部署在K8S之外的应用:OutsideclusterApplication

名为OutsideclusterApplication的应用并未部署在K8S环境,该应用能够访问到K8S环境的关键,就是将K8S环境的config文件复制一份,然后放在OutsideclusterApplication能够访问到的位置:

  • 登录K8S环境,在~/.kube目录下找到config文件,复制此文件到OutsideclusterApplication运行的机器上(我这里存放的路径是/Users/zhaoqin/temp/202007/05/,和后面的代码中一致)

  • 打开《K8S官方java客户端:准备》中创建的的kubernetesclient工程,在里面创建子工程,名为OutsideclusterApplication,这是个SpringBoot工程,pom.xml内容如下:

    4.0.0com.bolingcavalry kubernetesclient 1.0-SNAPSHOT../pom.xmlcom.bolingcavalry outsidecluster 0.0.1-SNAPSHOToutsideclusterDemo project for Spring Bootjarorg.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-json org.projectlombok lombok trueio.kubernetes client-java org.springframework.boot spring-boot-maven-plugin 2.3.0.RELEASE

  • 上述pom.xml中,需要注意的是在依赖spring-boot-starter-web的时候,使用exclusion语法排除了spring-boot-starter-json的依赖,这样做是为了将jackson的依赖全部去掉(spring-boot-starter-json依赖了jackson),如此一来整个classpath下面就没有了jackson库,此时SpringBoot框架就会使用gson作为序列化和反序列化工具(client-java.jar依赖了gson库);(这个问题在《K8S官方java客户端之二:序列化和反序列化问题》一文有详细介绍)

  • 新增OutsideclusterApplication.java,简单起见,该类即是引导类又是Controller:

    package com.bolingcavalry.outsidecluster;import com.google.gson.GsonBuilder;import io.kubernetes.client.openapi.ApiClient;import io.kubernetes.client.openapi.Configuration;import io.kubernetes.client.openapi.apis.CoreV1Api;import io.kubernetes.client.openapi.models.V1PodList;import io.kubernetes.client.util.ClientBuilder;import io.kubernetes.client.util.KubeConfig;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.FileReader;@SpringBootApplication@RestController@Slf4jpublic class OutsideclusterApplication { public static void main(String[] args) { SpringApplication.run(OutsideclusterApplication.class, args); } @RequestMapping(value = "/hello") public V1PodList hello() throws Exception { // 存放K8S的config文件的全路径 String kubeConfigPath = "/Users/zhaoqin/temp/202007/05/config"; // 以config作为入参创建的client对象,可以访问到K8S的API Server ApiClient client = ClientBuilder .kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))) .build(); Configuration.setDefaultApiClient(client); CoreV1Api api = new CoreV1Api(); // 调用客户端API取得所有pod信息 V1PodList v1PodList = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null); // 使用jackson将集合对象序列化成JSON,在日志中打印出来 log.info("pod info {}", new GsonBuilder().setPrettyPrinting().create().toJson(v1PodList)); return v1PodList; }}

  • 运行上述代码,在浏览器访问http://localhost:8080/hello ,即可取得K8S所有pod的详情,如下所示(为了让返回数据更加整齐美观,我用的是Firefox浏览器):

  • 查看控制台,可见日志也将详情打印出来:

至此,咱们的第一个使用K8S官方java客户端的应用就完成了,接下来的实战会尝试将应用部署在K8S环境内,在K8S内部进行各项操作;

欢迎关注我的公众号:程序员欣宸

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器