1. 程式人生 > >Kubernetes官方java客戶端之三:外部應用

Kubernetes官方java客戶端之三:外部應用

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 概覽 1. 以下提到的java客戶端都是指client-jar.jar; 2. 本文是《Kubernetes官方java客戶端》系列的第三篇,[《Kubernetes官方java客戶端:準備》](https://xinchen.blog.csdn.net/article/details/107480015)一文中咱們為實戰做好了準備工作,從本文開始進入實戰階段; 3. 本文的目標是開發名為OutsideclusterApplication的SpringBoot應用,該應用沒有部署在K8S環境,使用的config檔案是手動從K8S環境複製過來的,java客戶端通過此config檔案,能夠遠端訪問到K8S上的API Server,實現所有客戶端功能,整體部署情況如下圖: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202101/485422-20210105075620850-22254055.png) - 介紹完畢,開始編碼; ### 原始碼下載 1. 如果您不想編碼,可以在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)| [email protected]:zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 | 2. 這個git專案中有多個資料夾,本章的應用在kubernetesclient資料夾下,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202101/485422-20210105075621156-986482659.png) ### 部署在K8S之外的應用:OutsideclusterApplication 名為OutsideclusterApplication的應用並未部署在K8S環境,該應用能夠訪問到K8S環境的關鍵,就是將K8S環境的config檔案複製一份,然後放在OutsideclusterApplication能夠訪問到的位置: 1. 登入K8S環境,在~/.kube目錄下找到config檔案,複製此檔案到OutsideclusterApplication執行的機器上(我這裡存放的路徑是/Users/zhaoqin/temp/202007/05/,和後面的程式碼中一致); 2. 開啟[《Kubernetes官方java客戶端:準備》](https://xinchen.blog.csdn.net/article/details/107480015)中建立的的kubernetesclient工程,在裡面建立子工程,名為OutsideclusterApplication,這是個SpringBoot工程,pom.xml內容如下: ```xml ``` 3. 上述pom.xml中,需要注意的是在依賴spring-boot-starter-web的時候,使用exclusion語法排除了spring-boot-starter-json的依賴,這樣做是為了將jackson的依賴全部去掉(spring-boot-starter-json依賴了jackson),如此一來整個classpath下面就沒有了jackson庫,此時SpringBoot框架就會使用gson作為序列化和反序列化工具(client-java.jar依賴了gson庫);(這個問題在[《Kubernetes官方java客戶端之二:序列化和反序列化問題》](https://xinchen.blog.csdn.net/article/details/107503695)一文有詳細介紹) 4. 新增OutsideclusterApplication.java,簡單起見,該類即是引導類又是Controller: ```java package com.bolingcavalry.outsidecluster; import com.google.gson.GsonBuilder; import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.openapi.Configuration; import io.kubernetes.client.openapi.apis.CoreV1Api; import io.kubernetes.client.openapi.models.V1PodList; import io.kubernetes.client.util.ClientBuilder; import io.kubernetes.client.util.KubeConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.FileReader; @SpringBootApplication @RestController @Slf4j public class OutsideclusterApplication { public static void main(String[] args) { SpringApplication.run(OutsideclusterApplication.class, args); } @RequestMapping(value = "/hello") public V1PodList hello() throws Exception { // 存放K8S的config檔案的全路徑 String kubeConfigPath = "/Users/zhaoqin/temp/202007/05/config"; // 以config作為入參建立的client物件,可以訪問到K8S的API Server ApiClient client = ClientBuilder .kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))) .build(); Configuration.setDefaultApiClient(client); CoreV1Api api = new CoreV1Api(); // 呼叫客戶端API取得所有pod資訊 V1PodList v1PodList = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null); // 使用jackson將集合物件序列化成JSON,在日誌中打印出來 log.info("pod info \n{}", new GsonBuilder().setPrettyPrinting().create().toJson(v1PodList)); return v1PodList; } } ``` 5. 執行上述程式碼,在瀏覽器訪問http://localhost:8080/hello ,即可取得K8S所有pod的詳情,如下所示(為了讓返回資料更加整齊美觀,我用的是Firefox瀏覽器): ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202101/485422-20210105075621677-216786293.png) 6. 檢視控制檯,可見日誌也將詳情打印出來: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202101/485422-20210105075622149-140709387.png) - 至此,咱們的第一個使用K8S官方java客戶端的應用就完成了,接下來的實戰會嘗試將應用部署在K8S環境內,在K8S內部進行各項操作; ### 你不孤單,欣宸原創一路相伴 1. [Java系列](https://xinchen.blog.csdn.net/article/details/105068742) 2. [Spring系列](https://xinchen.blog.csdn.net/article/details/105086498) 3. [Docker系列](https://xinchen.blog.csdn.net/article/details/105086732) 4. [kubernetes系列](https://xinchen.blog.csdn.net/article/details/105086794) 5. [資料庫+中介軟體系列](https://xinchen.blog.csdn.net/article/details/105086850) 6. [DevOps系列](https://xinchen.blog.csdn.net/article/details/105086920) ### 歡迎關注公眾號:程式設計師欣宸 > 微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界... [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blo