歡迎訪問我的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能夠及時響應變化:
關於《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世界...
https://github.com/zq2599/blog_demos