欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

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

关于Kubernetes官方java客户端

  1. Kubernetes官方java客户端全称是Kubernetes Java Client,是K8S官方推出的java库,以8.0.2版本为例,其maven坐标如下:
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java</artifactId>
<version>8.0.2</version>
<scope>compile</scope>
</dependency>
  1. 本文是《Kubernetes官方java客户端》系列的第一篇,主要内容是了解概念,再为后续章节的做好准备工作;

  2. 回想咱们通常是如何操作K8S环境的,例如部署deployment,可以在dashboard页面上传yaml文件,也能在SSH终端执行kubectl命令,这些操作的去向都是K8S的API Server,如下图:

  3. 从上图可见,如果能把请求发送到API Server,就可以像kubectl命令那样操作K8S了,K8S官方java客户端(Kubernetes Java Client)就是拥有这样能力的SDK,使得java应用拥有kubectl那样的能力,如下图所示,加载了K8S官方java客户端库的SpringBoot应用,可以直接将请求发送到K8S环境:

需要准备什么

《Kubernetes官方java客户端》是以实战为主的系列文章,为了后面实战顺利进行,会在本章进行准备工作,包括硬件、软件、配置等方面,接下来会逐一列出;

开发环境

我这边用来编码的环境如下:

  1. 操作系统:macOS Catalina 10.15.5
  2. JDK:1.8.0_121
  3. Maven:33.3.9
  4. 开发工具:IntelliJ IDEA 2019.3.2 (Ultimate Edition)

运行环境

编码完成后要运行在K8S环境,该环境只有一台CentoOS电脑,信息如下:

  1. 操作系统:CentOS Linux release 7.8.2003
  2. K8S:1.15.3

选定client-java版本

  1. K8S有多个版本,java客户端也有多个版本,用的时候如何选择呢?请参考官方给出的兼容性列表:

  2. 如上图,横向是K8S版本,纵向是java客户端版本,表格中有三种符号,含义如下:
  • ✓ 表示从特性到API,客户端和K8S环境都匹配;
  • + 表示客户端有些特性和API与K8S环境无法匹配,但是他们共有的特性和API都能正常运行;
  • - 表示当前K8S环境上有些特性和API是客户端无法提供的;
  • 我的K8S版本是1.15,可见7.0.0版本的客户端是最合适的,后续的实战中也就选用该版本了,请您根据自己K8S的情况选择对应版本;

SpringBoot应用操作权限

  1. 后面的实战中,咱们的SpringBoot应用会以Pod的形式运行在K8S环境,通过client-java的API操作K8S,而K8S自然不会允许Pod随意对环境中的pod、deployment这些资源进行操作,因此我们要遵照K8S的规范进行RBAC相关的操作;
  2. K8S的角色设置可以非常详细,但也会更复杂,咱们还是不要花太多时间在这上面吧,这里我选择了使用K8S自带的最高权限的角色:cluster-admin,您可以按照自己的实际情况定制角色,下面是具体操作;
  3. SSH登录K8S,创建namespace:
kubectl create namespace kubernetesclient
  1. 创建文件rbac.yaml,内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubernates-client-service-account
namespace: kubernetesclient
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubernates-client-cluster-role-binding
subjects:
- kind: ServiceAccount
name: kubernates-client-service-account
namespace: kubernetesclient
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
  1. 今后的实战中,SpringBoot应用都会部署在名为kubernetesclient的namespace之下,使用名为kubernates-client-service-account的Service Account;

IEDA安装插件

因为项目中用到了Slf4j注解,请在IEDA上安装lombok插件,否则编写log相关代码的时候会有红叉:

创建所有java应用的父工程

  1. 后面的实战要创建多个SpringBoot应用,有必要提前创建一个父maven工程,将依赖库的定义和版本都放在在此;
  2. 创建名为kubernetesclient的maven工程,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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <groupId>com.bolingcavalry</groupId>
<artifactId>kubernetesclient</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <modules>
<module>helloworld</module>
<module>outsidecluster</module>
</modules> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies> <dependencyManagement> <dependencies>
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java</artifactId>
<version>7.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencyManagement>
</project>

由于这是个父工程,因此目前除了pom.xml暂时没有其他内容,后面的实战会往里面添加子工程;

全系列源码下载

  1. 本次实战用到了一个普通的SpringBoot工程,源码可在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项目中有多个文件夹,本章的应用在kubernetesclient文件夹下,如下图红框所示:

  • 以上就是实战前的准备工作了,感谢您的关注,后面的实战会更加精彩;

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

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

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

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

https://github.com/zq2599/blog_demos

Kubernetes官方java客户端之一:准备的更多相关文章

  1. Kubernetes官方java客户端之二:序列化和反序列化问题

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

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

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. Kubernetes官方java客户端之四:内部应用

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. Kubernetes官方java客户端之五:proto基本操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. Kubernetes官方java客户端之六:OpenAPI基本操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. Kubernetes官方java客户端之七:patch操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Kubernetes官方java客户端之八:fluent style

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. Java与WCF交互(一)补充:用WSImport生成WSDL的Java客户端代码

    在<Java与WCF交互(一):Java客户端调用WCF服务>一 文中,我描述了用axis2的一个Eclipse控件生成WCF的Java客户端代理类,后来有朋友建议用Xfire.CXF,一 ...

  9. Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

随机推荐

  1. Spring Boot 项目瘦身指南,瘦到不可思议!129M->1.3M

    之前在 从使用传统Web框架到切换到Spring Boot后的总结 中提到关于 Spring Boot 编译打包,Spring Boot 应用程序不用额外部署到外部容器中,可以直接通过 Maven 命 ...

  2. 基础篇:JAVA.Stream函数,优雅的数据流操作

    前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stream的概念,它可以让我们把集合数据当做一个个元素在处理,并且提供多线程模式 流的创建 流的各种数 ...

  3. 第4.3节 Python中与迭代相关的函数

    下面要介绍的enumerate.range.zip.reversed.sorted属于Python内置的函数或者类别,返回的对象都可通过迭代方法访问. 一.    enumerate函数 1.     ...

  4. 快速理解Python中使用百分号占位符的字符串格式化方法中%s和%r的输出内容的区别

    <Python中使用百分号占位符的字符串格式化方法中%s和%r的输出内容有何不同?>老猿介绍了二者的区别,为了快速理解,老猿在此使用另外一种方式补充说明一下: 1.使用%r是调用objec ...

  5. 第15.21节 PyQt(Python+Qt)入门学习:QListView的作用及属性详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 QListView是从QAbstractItemView 派生的类,实现了QAbstrac ...

  6. 开源脉冲神经网络深度学习框架——惊蛰(SpikingJelly)

    开源脉冲神经网络深度学习框架--惊蛰(SpikingJelly) 背景 近年来神经形态计算芯片发展迅速,大量高校企业团队跟进,这样的芯片运行SNN的能效比与速度都超越了传统的通用计算设备.相应的,神经 ...

  7. LeetCode初级算法之字符串:387 字符串中的第一个唯一字符

    字符串中的第一个唯一字符 题目地址:https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 给定一个字符串,找到它的第 ...

  8. Day7 Scrum 冲刺博客

    一.站立式会议1. 会议照片 2. 工作进度+燃尽图 团队成员 昨日完成工作 今日工作计划 遇到的困难  周梓波  添加键盘监听事件 由于游戏中计分规则不合理,进行重新设计  无  纪昂学  添加方块 ...

  9. Spring引用数据库文件配置数据源

    例子:引用 druid.properties 在Spring配置文件(applicationContext.xml)引入外部配置文件,需要指定特定的 key才能被正确识别并使用 在原本的 url.us ...

  10. (8)ASP.NET Core3.1 Ocelot Consul服务注册与发现

    1.服务注册与发现(Service Discovery) ●服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul.ZooKeeper.etcd.Eureka) ...