client-go實戰之一:准備工作


歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

系列文章鏈接

  1. client-go實戰之一:准備工作
  2. client-go實戰之二:RESTClient
  3. client-go實戰之三:Clientset
  4. client-go實戰之四:dynamicClient
  5. 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實戰之前要對以下知識點有所了解:
  1. kubernetes基本原理和操作;
  2. kubernetes的Group、Version、Resource等概念,推薦閱讀《Kubernetes的Group、Version、Resource學習小記》

本篇概覽

作為整個系列的開篇,除了對client-go做介紹,還要為后面的實戰做好如下准備工作:

  1. 列出要用到的硬件;
  2. 列出要用到的軟件及其版本;
  3. 同步kubernetes配置文件,使得開發環境可以遠程訪問kubernetes;

環境信息

  • 如下圖所示,本次實戰一共用到兩台電腦:

在這里插入圖片描述

  1. Linux電腦:操作系統是CentOS 7.9,已安裝1.20.0版本的kubernetes
  2. MacBook Pro:操作系統是macOS Big Sur(11.1),編碼工作在此電腦上進行
  3. MacBook Pro上安裝的go版本為1.15.7
  4. 您可以按照個人習慣選擇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提供了以下四種客戶端對象,后面的實戰會逐個體驗:
  1. RESTClient:這是最基礎的客戶端對象,僅對HTTPRequest進行了封裝,實現RESTFul風格API,這個對象的使用並不方便,因為很多參數都要使用者來設置,於是client-go基於RESTClient又實現了三種新的客戶端對象;
  2. ClientSet:把Resource和Version也封裝成方法了,用起來更簡單直接,一個資源是一個客戶端,多個資源就對應了多個客戶端,所以ClientSet就是多個客戶端的集合了,這樣就好理解了,不過ClientSet只能訪問內置資源,訪問不了自定義資源;
  3. DynamicClient:可以訪問內置資源和自定義資源,個人感覺有點像java的集合操作,拿出的內容是Object類型,按實際情況自己去做強制轉換,當然了也會有強轉失敗的風險;
  4. DiscoveryClient:用於發現kubernetes的API Server支持的Group、Version、Resources等信息;
  • 至此,咱們的環境和知識准備工作就完成了,接下來一同去探索強大的client-go吧!

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 數據庫+中間件系列
  6. DevOps系列

歡迎關注公眾號:程序員欣宸

微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM