歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類匯總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
系列文章鏈接
- client-go實戰之一:準備作業
- client-go實戰之二:RESTClient
- client-go實戰之三:Clientset
- client-go實戰之四:dynamicClient
- client-go實戰之五:DiscoveryClient
關于client-go
- client-go是kubernetes官方提供的go語言的客戶端庫,go應用使用該庫可以訪問kubernetes的API Server,這樣我們就能通過編程來對kubernetes資源進行增刪改查操作;
- 除了提供豐富的API用于操作kubernetes資源,client-go還為controller和operator提供了重要支持,如下圖,client-go的informer機制可以將controller關注的資源變化及時帶給此controller,使controller能夠及時回應變化:

- GitHub倉庫:https://github.com/kubernetes/client-go
關于《client-go實戰》系列
《client-go實戰》系列是欣宸推出的實戰主題原創,旨在與大家一起動手體驗client-go的相關技術,從簡單的實踐開始,逐步深入了解client-go的強大功能,為后續的operator學習打下扎實的基礎;
重要前提
- 開始client-go實戰之前要對以下知識點有所了解:
- kubernetes基本原理和操作;
- kubernetes的Group、Version、Resource等概念,推薦閱讀《Kubernetes的Group、Version、Resource學習小記》
本篇概覽
作為整個系列的開篇,除了對client-go做介紹,還要為后面的實戰做好如下準備作業:
- 列出要用到的硬體;
- 列出要用到的軟體及其版本;
- 同步kubernetes組態檔,使得開發環境可以遠程訪問kubernetes;
環境資訊
- 如下圖所示,本次實戰一共用到兩臺電腦:

- Linux電腦:作業系統是CentOS 7.9,已安裝1.20.0版本的kubernetes
- MacBook Pro:作業系統是macOS Big Sur(11.1),編碼作業在此電腦上進行
- MacBook Pro上安裝的go版本為1.15.7
- 您可以按照個人習慣選擇IDE,我這里用的是GoLand-2020.2版本
確定要用的client-go版本
client-go官方提供了多個版本,并且給出了和kubernetes版本的匹配串列,如下所示:
| Kubernetes 1.15 | Kubernetes 1.16 | Kubernetes 1.17 | Kubernetes 1.18 | Kubernetes 1.19 | Kubernetes 1.20 | |
|---|---|---|---|---|---|---|
kubernetes-1.15.0 |
? | +- | +- | +- | +- | +- |
kubernetes-1.16.0 |
+- | ? | +- | +- | +- | +- |
kubernetes-1.17.0/v0.17.0 |
+- | +- | ? | +- | +- | +- |
kubernetes-1.18.0/v0.18.0 |
+- | +- | +- | ? | +- | +- |
kubernetes-1.19.0/v0.19.0 |
+- | +- | +- | +- | ? | +- |
kubernetes-1.20.0/v0.20.0 |
+- | +- | +- | +- | +- | ? |
HEAD |
+- | +- | +- | +- | +- | +- |
這里解釋一下表格中的? 、+ 、- 的含義:
?表示精確匹配,如下圖紅框,表示v0.20.0版本可以精確匹配1.20.0版本的kubernetes:

+表示有的新特性是client-go支持的,但是此kubernetes版本卻不支持;-表示有的新特性是kubernetes支持的,但是此client-go版本卻不支持;
- 我這里kubernetes版本為1.20.0,因此選用client-go的0.20.0版本最合適;
復制k8s環境的組態檔
- 為了能讓MacBook Pro電腦上的go應用順利訪問K8S,請將K8S環境下的~/.kube/config檔案復制到MacBook Pro電腦的~/.kube/目錄下;
客戶端物件簡述
- 本篇聚焦準備作業,不做編碼,這里提前介紹一下后面的實戰內容:通過client-go提供的客戶端物件與kubernetes的API Server進行互動,而client-go提供了以下四種客戶端物件,后面的實戰會逐個體驗:
- RESTClient:這是最基礎的客戶端物件,僅對HTTPRequest進行了封裝,實作RESTFul風格API,這個物件的使用并不方便,因為很多引數都要使用者來設定,于是client-go基于RESTClient又實作了三種新的客戶端物件;
- ClientSet:把Resource和Version也封裝成方法了,用起來更簡單直接,一個資源是一個客戶端,多個資源就對應了多個客戶端,所以ClientSet就是多個客戶端的集合了,這樣就好理解了,不過ClientSet只能訪問內置資源,訪問不了自定義資源;
- DynamicClient:可以訪問內置資源和自定義資源,個人感覺有點像java的集合操作,拿出的內容是Object型別,按實際情況自己去做強制轉換,當然了也會有強轉失敗的風險;
- DiscoveryClient:用于發現kubernetes的API Server支持的Group、Version、Resources等資訊;
- 至此,咱們的環境和知識準備作業就完成了,接下來一同去探索強大的client-go吧!
你不孤單,欣宸原創一路相伴
- Java系列
- Spring系列
- Docker系列
- kubernetes系列
- 資料庫+中間件系列
- DevOps系列
歡迎關注公眾號:程式員欣宸
微信搜索「程式員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/297954.html
標籤:其他
下一篇:配置JDK方法
