日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入了解Kubernetes REST API的工作方式

發(fā)布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入了解Kubernetes REST API的工作方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)于Kubernetes REST API的工作方式:

在哪里以及如何定義從REST路徑到處理REST調(diào)用的函數(shù)的映射?

與etcd的交互發(fā)生在哪里?

從客戶端發(fā)出請求到保存在etcd中對象的端到端路徑是怎樣的?

Kubernetes REST框架

Kubernetes REST實現(xiàn)可大致分為三個部分,如下圖所示。

客戶端/服務(wù)器功能通過k8s.io包中的各種庫實現(xiàn)。服務(wù)器端實現(xiàn)分布在多個包中。

服務(wù)器端的根目錄包是apiserver, 其包含有endpoints,server,registry和storage等重要的包。

客戶端在client-go包中實現(xiàn),其包含的主要包是rest。

幾個關(guān)鍵Kubernetes概念

1)組(Group)

KubernetesREST API以層次結(jié)構(gòu)組織,并以/apis為根。 一個組為根下的一組REST資源集定義一個邏輯名稱。例如API組名為apps,它在層次結(jié)構(gòu)中就表示為/apis/apps。

可以使用如下命令檢查所有可用的API組:

kubectl get --raw/apis | python -mjson.tool

2)版本(Version)

KubernetesREST API使用版本。版本名用于定義REST資源端點,這些資源短點在組內(nèi)不斷演變。典型的版本名稱有v1,v1alpha1,v1beta1。可以使用如下命令查找API組的所有可用版本:

kubectl get-raw /apis/<group-name>

例如,想找apps組下的所有可用版本,可使用如下命令:

kubectl get --raw/apis/apps | python -mjson.tool

3)類型(Type)

表示概念的命名實體(例如:Pod,Deployment,Service等)。

4)種類(Kind)

Kubernetes類型的JSON/YAML表示。

5)資源(Resource)

處理特定種類的REST請求的端點/路徑。資源在api層次結(jié)構(gòu)中通用表示為:

/apis/<group>/<version>/namespaces/<namespace>/<kind-plural>

例如, deployments可表示為

/apis/apps/v1/namespaces/default/deployments

服務(wù)器端

服務(wù)器端集中探究以下問題:

A:?服務(wù)器中注冊了哪些資源?

B: 與etcd的交互發(fā)生在哪里?

1)genericapiserver.go

文件先定義APIGroupInfo類型用于保存關(guān)于API組的信息,例如存在哪些版本以及在這些版本中定義了哪些資源。其次,定義GenericAPIServer類型,并實現(xiàn)為API組注冊REST端點的InstallAPIGroup方法。該方法在api組版本實例中內(nèi)部調(diào)用InstallREST方法。為運行服務(wù)器端,GenericAPIServer還包含Run()方法。

2)groupversion.go

文件先定義APIGroupVersion類型,用于承載關(guān)于某api組的特定版本的信息,例如引用提供實際REST端點實現(xiàn)(store.go)的對象的引用。還定義InstallREST方法,內(nèi)部調(diào)用安裝程序上的Install方法來注冊該版本的REST資源。

3)installer.go

文件定義實現(xiàn)Install方法的APIInstaller類型。Install方法使用GroupVersion實例中的REST實現(xiàn)對象(請參見第2點),以將REST路徑注冊到go-restful庫中的處理函數(shù)映射。當(dāng)使用這個庫時,模式是為一個特定的REST路徑定義一個可調(diào)用的`handler`函數(shù)。該模式在installer.go中用于設(shè)置處理對應(yīng)于不同資源端點。

例如:ws.GET(action.Path).To(handler), 其中handler是從GroupVersion實例的REST實現(xiàn)對象中獲得的函數(shù)。它被定義為處理action.Path上的GET請求時被調(diào)用。

4)master.go

文件先定義了包含指向GenericAPIServer實例的指針的Master類型。還定義了InstallAPIs方法,通過調(diào)用genericapiserver的InstallAPIGroup方法啟動注冊工作流程。在創(chuàng)建Master的新實例時,InstallAPIs方法被調(diào)用。

5)registry/rest/rest.go

文件定義了不同的各種接口,應(yīng)該被任何想要提供Kubernetes-like REST端點的后端實現(xiàn)。該文件中的關(guān)鍵接口是:Storage和StandardStorage。REST實現(xiàn)對象的引用屬于rest.Storage接口類型,該對象由在groupversion.go中的APIGroupVersion維護(hù)。

6)registry/generic/registry/store.go

文件定義了實現(xiàn)rest.StandardStorage接口的Store類型。方法實現(xiàn)在由Store類型維護(hù)的Storage對象上的調(diào)用。此對象的類型為storage.Inte**ce(請參見下文)。

7)storage/Interface.go

文件定義了一個名為Interface的接口,包含一些方法。如果我們想可用于實際持久化的store,必須實現(xiàn)這些方法。對于'Interface'接口中所有方法,一個關(guān)鍵點是它們只返回error而沒有其他的內(nèi)容。如果任何數(shù)據(jù)需要由方法返回,將通過一個指針作為參數(shù)傳遞的對象返回。作為一個例子,檢查簽名的Get方法。

8)storage/etcd3/store.go

文件定義了實現(xiàn)storage.Interface的Store類型它使用etcd 的clientv3庫與etcd3進(jìn)行交互。

客戶端

在客戶端,我們主要探究REST調(diào)用如何進(jìn)行?

1)request.go

文件定義了Request類型,實現(xiàn)用于在資源上進(jìn)行REST調(diào)用的方法。進(jìn)行調(diào)用的模式是先創(chuàng)建一個NewRequest對象,然后使用流式樣方法鏈來調(diào)用REST方法(GET,POST,PUT,DELETE)。資源和名稱空間的名稱是創(chuàng)建完整端點所必需的,它們通過鏈?zhǔn)椒椒ㄕ{(diào)用進(jìn)行定義。

2)client.go

文件首先定義了一個名為Interface的接口,它包含返回Request對象指針(在request.go中定義)的REST方法包裝器。其次定義了實現(xiàn)Interface接口的REST Client類型。

進(jìn)行REST調(diào)用的模式是首先創(chuàng)建一個NewRESTClient,然后通過其中一個REST方法包裝體獲取NewRequest對象。一旦NewRequest對象可用,REST調(diào)用就像上面解釋的那樣使用方法鏈進(jìn)行。

探究

1.? ?Kubernetes代碼擁有豐富的文檔,這有助于理解一段代碼作用。

2.? ?包含類型隱含地實現(xiàn)方法的地方,可以很方便的在Interfaces中統(tǒng)計所有方法,進(jìn)而很容易明白該類型實現(xiàn)了哪些方法。 (注冊表包很好地實現(xiàn)了這一點,但installer.go是一個不會發(fā)生這種情況的例子。)

3.? ?Golang導(dǎo)入別名可以幫助確定一個方法來自哪個包。雖然代碼確實使用了別名,但還有更廣泛的使用它們的空間。

轉(zhuǎn)載于:https://www.cnblogs.com/CCE-SWR/p/9915905.html

總結(jié)

以上是生活随笔為你收集整理的深入了解Kubernetes REST API的工作方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。