写点什么

Kubernetes 官方 java 客户端之一:准备

作者:程序员欣宸
  • 2022 年 3 月 31 日
  • 本文字数:2645 字

    阅读完需:约 9 分钟

Kubernetes官方java客户端之一:准备

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos


关于 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,如下图:

  1. 从上图可见,如果能把请求发送到 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: v1kind: ServiceAccountmetadata:  name: kubernates-client-service-account  namespace: kubernetesclient---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:  name: kubernates-client-cluster-role-bindingsubjects:  - kind: ServiceAccount    name: kubernates-client-service-account    namespace: kubernetesclientroleRef:  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):



  1. 这个 git 项目中有多个文件夹,本章的应用在 kubernetesclient 文件夹下,如下图红框所示:


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

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

发布于: 2022 年 03 月 31 日阅读数: 29
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
Kubernetes官方java客户端之一:准备_Kubernetes_程序员欣宸_InfoQ写作平台