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

程式設計師欣宸發表於2021-09-06

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

相關文章