2021-01-05

Return Home zq2599
CnBlogs Home New Post Contact Admin Subscription订阅 Posts - 132 Articles - 0 Comments - 21
Kubernetes官方java客户端之三:外部应用
欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

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

概览

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

如果您不想编码,可以在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协议
这个git项目中有多个文件夹,本章的应用在kubernetesclient文件夹下,如下图红框所示:
在这里插入图片描述
部署在K8S之外的应用:OutsideclusterApplication

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

登录K8S环境,在~/.kube目录下找到config文件,复制此文件到OutsideclusterApplication运行的机器上(我这里存放的路径是/Users/zhaoqin/temp/202007/05/,和后面的代码中一致);
打开《Kubernetes官方java客户端:准备》中创建的的kubernetesclient工程,在里面创建子工程,名为OutsideclusterApplication,这是个SpringBoot工程,pom.xml内容如下:

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


4.0.0

<parent>
    <groupId>com.bolingcavalry</groupId>
    <artifactId>kubernetesclient</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>

<groupId>com.bolingcavalry</groupId>
<artifactId>outsidecluster</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>outsidecluster</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-json</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>io.kubernetes</groupId>
        <artifactId>client-java</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.0.RELEASE</version>
        </plugin>
    </plugins>
</build>
上述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客户端之二:序列化和反序列化问题》一文有详细介绍) 新增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 {

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 \n{}", new GsonBuilder().setPrettyPrinting().create().toJson(v1PodList));

    return v1PodList;
}

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

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

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

Java系列
Spring系列
Docker系列
kubernetes系列
数据库+中间件系列
DevOps系列
欢迎关注公众号:程序员欣宸

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

好文要顶 关注我 收藏该文
程序员欣宸
关注 - 4
粉丝 - 17
+加关注
0 0
« 上一篇: Kubernetes官方java客户端之二:序列化和反序列化问题
posted @ 2021-01-05 07:56 程序员欣宸 Views(14) Comments(0) Edit 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】AWS携手博客园为开发者送福利,注册立享12个月免费套餐
【推荐】七牛云新老用户同享 1 分钱抢 CDN 1TB流量大礼包!
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· kubernetes之部署java项目
· Kubernetes
· kubernetes
· Kubernetes Ingress
· Kubernetes Nacos
» 更多推荐…

最新 IT 新闻:
· 蛋壳之后,房企们能否成为长租公寓的“解药”?
· 高通骁龙480发布:采用8nm工艺 处理器性能相比上一代翻倍
· 第九城市股价涨逾50%触发熔断,公告称将开展数字货币业务
· 不造整车造部件 华为驾车向何方?
· NASA回顾2020年在国际空间站上进行的关键实验
» 更多新闻…
昵称: 程序员欣宸
园龄: 8年
粉丝: 17
关注: 4
+加关注
< 2021年1月 >
日 一 二 三 四 五 六
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
Search

My Tags
CI(1)
DevOps(1)
GitLab(1)
java(1)
springboot(1)
PostArchives
2021/1(2)
2020/12(13)
2020/11(23)
2020/10(27)
2020/9(6)
2020/6(7)
2019/11(5)
2019/10(6)
2019/9(41)
2019/8(2)
Recent Comments

  1. Re:群晖DS218+部署GitLab
    大佬,麻烦问下内存是哪个牌子的吗?可以私信连接吗?
    –a403828237
  2. Re:Flink SQL Client综合实战
    老师您好,我是开源中国的内容志愿者李艳,想跟您聊聊内容合作,能否加下您的微信或qq给您详细说明下
    –爱吃甜品的女孩
  3. Re:K8S的Kafka监控(Prometheus+Grafana)
    666呀!
    –monkey’s
  4. Re:K8S的Kafka监控(Prometheus+Grafana)
    @通用C#系统架构 谢谢您的反馈…
    –程序员欣宸
  5. Re:K8S的Kafka监控(Prometheus+Grafana)
    非常好的文章,整套能搭建起来很棒。
    –通用C#系统架构
    Top Posts
  6. 树莓派4B安装64位Linux(不用显示器键盘鼠标)(12401)
  7. 设置IntelliJ IDEA支持lambda表达式(7419)
  8. Jenkins流水线(pipeline)实战之:从部署到体验(2612)
  9. 树莓派4B安装docker-compose(64位Linux)(2144)
  10. 让docker中的mysql启动时自动执行sql(2134)
    推荐排行榜
  11. Jenkins把GitHub项目做成Docker镜像(3)
  12. GitLab CI构建SpringBoot-2.3应用(2)
  13. springboot的jar为何能独立运行(2)
  14. 设置非root账号不用sudo直接执行docker命令(2)
  15. 群晖DS218+部署mysql(2)
    Copyright © 2021 程序员欣宸
    Powered by .NET 5.0 on Kubernetes
注:请在所有本程序时先到后台栏目管理里面设定会员在线时间,否者会员登陆时要出错 安装使用说明: 1、修改index/articleconn.asp、admin/articleconn.asp、lanserver/conn.asp和 user/conn.asp 文件里的数据库连接参数 2、将所有文件上传至你的主机上,然后运行index.html即可(里面带2个插件)! 3、后台登录地址:你的域名/admin/login.asp 登录名admin和密码均admin888 4、要使用邮件发送功能请修改sendmail.asp文件,修改的地方有: __________________________________________________________ 找到以下代码,改相应的参数即可:(此功能需服务器支持:JMAIL系统) smtpserver ="邮局服务器地址(IP)" smtpuser ="你的EMAIL登录帐号(如:webmaster@tx38.com)" smtppwd ="你的EMAIL登录密码" __________________________________________________________ 5、要改首页的模板找到admin/index_mb.asp,用网页编辑器编辑就行,最新电影JS 请找到admin/js_news.asp,把里面我的地址改成你的地址。 6、如果有会员在会员期没到时又想升级另下订单的话,请直接修改会员个人资料里的“付款状态”   将里面的数字清空即可再次提交订单了,这里的数字说明如下:  付款状态=" "(空)  即未提交订单  付款状态=0   提交了订单,但未得到确认(不能再提交了)  付款状态=1       提交了订单,并已得到确认(不能再提交了) 8、网站广告请修改ad/js目录下的1.js,2.js,3.js,4.js。 ***********************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值