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

欢迎访问个人GitHub

https://github.com/zq2599/blog_demosjava

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

关于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,以下图:
    在这里插入图片描述github

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

须要准备什么

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

开发环境

我这边用来编码的环境以下:数据库

  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电脑,信息以下:apache

  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相关代码的时候会有红叉:
在这里插入图片描述api

建立全部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暂时没有其余内容,后面的实战会往里面添加子工程;springboot

全系列源码下载

  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

相关文章
相关标签/搜索