Kubernetes官方java客戶端之一:准備


歡迎訪問我的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM