1. 程式人生 > >Kubernetes官方java客戶端之一:準備

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

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 關於Kubernetes官方java客戶端 1. Kubernetes官方java客戶端全稱是Kubernetes Java Client,是K8S官方推出的java庫,以8.0.2版本為例,其maven座標如下: ```xml ``` 2. 本文是《Kubernetes官方java客戶端》系列的第一篇,主要內容是瞭解概念,再為後續章節的做好準備工作; 3. 回想咱們通常是如何操作K8S環境的,例如部署deployment,可以在dashboard頁面上傳yaml檔案,也能在SSH終端執行kubectl命令,這些操作的去向都是K8S的API Server,如下圖: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201231073955047-847130810.png) 4. 從上圖可見,如果能把請求傳送到API Server,就可以像kubectl命令那樣操作K8S了,K8S官方java客戶端(Kubernetes Java Client)就是擁有這樣能力的SDK,使得java應用擁有kubectl那樣的能力,如下圖所示,載入了K8S官方java客戶端庫的SpringBoot應用,可以直接將請求傳送到K8S環境: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201231073955743-1857229208.png) ### 需要準備什麼 《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客戶端也有多個版本,用的時候如何選擇呢?請參考官方給出的相容性列表: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201231073956214-1274867253.png) 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: ```shell kubectl create namespace kubernetesclient ``` 4. 建立檔案rbac.yaml,內容如下: ```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 ``` 5. 今後的實戰中,SpringBoot應用都會部署在名為kubernetesclient的namespace之下,使用名為kubernates-client-service-account的Service Account; ### IEDA安裝外掛 因為專案中用到了Slf4j註解,請在IEDA上安裝lombok外掛,否則編寫log相關程式碼的時候會有紅叉: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201231073956595-168292391.png) ### 建立所有java應用的父工程 1. 後面的實戰要建立多個SpringBoot應用,有必要提前建立一個父maven工程,將依賴庫的定義和版本都放在在此; 2. 建立名為kubernetesclient的maven工程,pom.xml如下: ```xml ``` 由於這是個父工程,因此目前除了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)| [email protected]:zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 | 2. 這個git專案中有多個資料夾,本章的應用在kubernetesclient資料夾下,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202012/485422-20201231073957312-797352551.png) - 以上就是實戰前的準備工作了,感謝您的關注,後面的實戰會更加精彩; ### 你不孤單,欣宸原創一路相伴 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