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