美文网首页
Kubernetes官方java客户端之一:准备

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

作者: 程序员欣宸 | 来源:发表于2020-12-31 07:39 被阅读0次

    欢迎访问我的GitHub

    https://github.com/zq2599/blog_demos

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

    关于Kubernetes官方java客户端

    1. Kubernetes官方java客户端全称是<font color="blue">Kubernetes Java Client</font>,是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,就可以像<font color="blue">kubectl</font>命令那样操作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版本是<font color="blue">1.15</font>,可见<font color="red">7.0.0</font>版本的客户端是最合适的,后续的实战中也就选用该版本了,请您根据自己K8S的情况选择对应版本;

    SpringBoot应用操作权限

    1. 后面的实战中,咱们的SpringBoot应用会以Pod的形式运行在K8S环境,通过client-java的API操作K8S,而K8S自然不会允许Pod随意对环境中的pod、deployment这些资源进行操作,因此我们要遵照K8S的规范进行RBAC相关的操作;
    2. K8S的角色设置可以非常详细,但也会更复杂,咱们还是不要花太多时间在这上面吧,这里我选择了使用K8S自带的最高权限的角色:<font color="blue">cluster-admin</font>,您可以按照自己的实际情况定制角色,下面是具体操作;
    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应用都会部署在名为<font color="blue">kubernetesclient</font>的namespace之下,使用名为<font color="red">kubernates-client-service-account</font>的Service Account;

    IEDA安装插件

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


    在这里插入图片描述

    创建所有java应用的父工程

    1. 后面的实战要创建多个SpringBoot应用,有必要提前创建一个父maven工程,将依赖库的定义和版本都放在在此;
    2. 创建名为<font color="blue">kubernetesclient</font>的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项目中有多个文件夹,本章的应用在<font color="blue">kubernetesclient</font>文件夹下,如下图红框所示:
    在这里插入图片描述
    • 以上就是实战前的准备工作了,感谢您的关注,后面的实战会更加精彩;

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

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

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

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

    相关文章

      网友评论

          本文标题:Kubernetes官方java客户端之一:准备

          本文链接:https://www.haomeiwen.com/subject/ktqloktx.html