Kubernetes官方java客户端之三:外部应用

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

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

概览

  1. 以下提到的<font color="blue">java客户端</font>都是指<font color="red">client-jar.jar</font>
  2. 本文是《Kubernetes官方java客户端》系列的第三篇,《Kubernetes官方java客户端:准备》一文中咱们为实战做好了准备工作,从本文开始进入实战阶段;
  3. 本文的目标是开发名为<font color="blue">OutsideclusterApplication的SpringBoot</font>应用,该应用没有部署在K8S环境,使用的config文件是手动从K8S环境复制过来的,java客户端通过此config文件,能够远程访问到K8S上的API Server,实现所有客户端功能,整体部署情况如下图: 在这里插入图片描述
  • 介绍完毕,开始编码;

源码下载

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

名称

链接

备注

项目主页

https://github.com/zq2599/blog_demos

该项目在GitHub上的主页

git仓库地址(https)

https://github.com/zq2599/blog_demos.git

该项目源码的仓库地址,https协议

git仓库地址(ssh)

git@github.com:zq2599/blog_demos.git

该项目源码的仓库地址,ssh协议

  1. 这个git项目中有多个文件夹,本章的应用在<font color="blue">kubernetesclient</font>文件夹下,如下图红框所示: 在这里插入图片描述

部署在K8S之外的应用:OutsideclusterApplication

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

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

  2. 打开《Kubernetes官方java客户端:准备》中创建的的<font color="blue">kubernetesclient</font>工程,在里面创建子工程,名为<font color="blue">OutsideclusterApplication</font>,这是个SpringBoot工程,pom.xml内容如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

    1<parent> 2 <groupId>com.bolingcavalry</groupId> 3 <artifactId>kubernetesclient</artifactId> 4 <version>1.0-SNAPSHOT</version> 5 <relativePath>../pom.xml</relativePath> 6</parent> 7 8<groupId>com.bolingcavalry</groupId> 9<artifactId>outsidecluster</artifactId> 10<version>0.0.1-SNAPSHOT</version> 11<name>outsidecluster</name> 12<description>Demo project for Spring Boot</description> 13<packaging>jar</packaging> 14 15<dependencies> 16 <dependency> 17 <groupId>org.springframework.boot</groupId> 18 <artifactId>spring-boot-starter-web</artifactId> 19 <exclusions> 20 <exclusion> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-json</artifactId> 23 </exclusion> 24 </exclusions> 25 </dependency> 26 <dependency> 27 <groupId>org.projectlombok</groupId> 28 <artifactId>lombok</artifactId> 29 <optional>true</optional> 30 </dependency> 31 <dependency> 32 <groupId>io.kubernetes</groupId> 33 <artifactId>client-java</artifactId> 34 </dependency> 35</dependencies> 36 37<build> 38 <plugins> 39 <plugin> 40 <groupId>org.springframework.boot</groupId> 41 <artifactId>spring-boot-maven-plugin</artifactId> 42 <version>2.3.0.RELEASE</version> 43 </plugin> 44 </plugins> 45</build>
    </project>
  3. 上述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库);(这个问题在《Kubernetes官方java客户端之二:序列化和反序列化问题》一文有详细介绍)

  4. 新增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 @Slf4j public class OutsideclusterApplication {

    1public static void main(String[] args) { 2 SpringApplication.run(OutsideclusterApplication.class, args); 3} 4 5@RequestMapping(value = "/hello") 6public V1PodList hello() throws Exception { 7 // 存放K8S的config文件的全路径 8 String kubeConfigPath = "/Users/zhaoqin/temp/202007/05/config"; 9 10 // 以config作为入参创建的client对象,可以访问到K8S的API Server 11 ApiClient client = ClientBuilder 12 .kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))) 13 .build(); 14 15 Configuration.setDefaultApiClient(client); 16 17 CoreV1Api api = new CoreV1Api(); 18 19 // 调用客户端API取得所有pod信息 20 V1PodList v1PodList = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null); 21 22 // 使用jackson将集合对象序列化成JSON,在日志中打印出来 23 log.info("pod info \n{}", new GsonBuilder().setPrettyPrinting().create().toJson(v1PodList)); 24 25 return v1PodList; 26}

    }

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

  6. 查看控制台,可见日志也将详情打印出来: 在这里插入图片描述

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

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

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

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界... https://github.com/zq2599/blog_demos

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

jackson学习之三:常用API操作

欢迎访问我的GitHubhttps://github.com/zq2599/blog\_demos(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fzq2599%2Fblog_demos)内容:所有原创文章分类汇总及配套源码,涉及Java、Doc

K8S的StorageClass实战(NFS)

欢迎访问我的GitHubhttps://github.com/zq2599/blog\_demos(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fzq2599%2Fblog_demos)内容:所有原创文章分类汇总及配套源码,涉及Java、Doc

Flink处理函数实战之五:CoProcessFunction(双流处理)

欢迎访问我的GitHubhttps://github.com/zq2599/blog\_demos(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fzq2599%2Fblog_demos)内容:所有原创文章分类汇总及配套源码,涉及Java、Doc

Flink的DataSource三部曲之一:直接API

欢迎访问我的GitHubhttps://github.com/zq2599/blog\_demos(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fzq2599%2Fblog_demos)内容:所有原创文章分类汇总及配套源码,涉及Java、Doc