kubernetes 的API 介紹


API conventions doc描述了API的全部協議。

API Reference文檔中描述了API的端點、資源類型和示例。

Controlling API Access doc中討論了通過遠程訪問API的相關問題。

 

Kubernetes API是系統聲明式配置架構的基礎。Kubectl命令行工具被用於創建、更新、刪除、獲取API對象。Kubernetes通過API資源存儲自己的序列化狀態(這些狀態存儲在etcd中)。Kubernetes被分成多個組件,各組件通過API相互交互。

 

API變更

根據經驗,任何成功的系統都需要隨着新的用例出現或現有用例發生變化的情況下,進行相應的進化與調整。因此,我們希望Kubernetes API也可以保持持續的進化和調整。同時,在較長一段時間內,我們也希望與現有客戶端版本保持良好的向下兼容性。一般情況下,增加新的API資源和資源字段不會導致向下兼容性問題發生;但如果是需要刪除一個已有的資源或者字段,那么必須通過API廢棄流程來進行。可參考API變更文檔,了解兼容性變更的要素以及如何變更API的流程

 

OpenAPI和API Swagger 定義

完整的API詳細文檔使用 OpenAPI生成,隨着Kubernetes 1.10 版本的正式啟用,Kubernetes API服務通過/openapi/v2接口提供OpenAPI規范。通過設置 HTTP 標頭規定了請求的結構。

 

 

 

在1.14版本之前,區分結構的接口通過(/swagger.json/swagger-2.0.0.json/swagger-2.0.0.pb-v1/swagger-2.0.0.pb-v1.gz) 提供不同格式的 OpenAPI規范。但是這些接口已經被廢棄,並且已經在 Kubernetes 1.14 中被刪除。

 

獲取OpenAPI 規范的例子:

 

 

 

Kubernetes實現了另一種基於Protobuf的序列化格式,該格式主要用於集群內通信,並在設計方案中進行了說明,每個模式的IDL文件位於定義API對象的Go軟件包中。 在 1.14 版本之前, Kubernetes apiserver 也提供API服務用於返回Swagger v1.2Kubernetes API規范通過/swaggerapi接口,但是這個接口已經被廢棄,並且在 Kubernetes 1.14 中已經被移除。

 

API 版本

為了使刪除字段或者重構資源更加容易,Kubernetes支持多個API版本。每一個版本都在不同API路徑下,例如/api/v1或者/apis/extensions/v1beta1。我們選擇在API級別進行版本化,而不是在資源或字段級別進行版本化,以確保API提供清晰、一致的系統資源和行為視圖,並控制對已廢止的API和/或實驗性API的訪問。 JSON和Protobuf序列化模式遵循架構更改的相同准則 - 下面的所有描述都同時適用於這兩種格式。請注意,API版本控制和軟件版本控制只有間接相關性。API和發行版本建議描述了API版本與軟件版本之間的關系。不同的API版本名稱意味着不同級別的軟件穩定性和支持程度。每個級別的標准在API變更文檔中有更詳細的描述。 內容主要概括如下:

 

alpha-內部測試版本: 

1)版本名稱包含了alpha (例如:v1alpha1)。

2)可能是有缺陷的。啟用該功能可能會帶來隱含的問題,默認情況是關閉的。

3)支持的功能可能在沒有通知的情況下隨時刪除。

4)API的更改可能會帶來兼容性問題,但是在后續的軟件發布中不會有任何通知。

5)由於bugs風險的增加和缺乏長期的支持,推薦在短暫的集群測試中使用。

 

beta-公測版本:

1)版本名稱包含了beta(例如:v2beta3)。

2)代碼已經測試過。啟用該功能被認為是安全的,功能默認已啟用。

3)所有已支持的功能不會被刪除,細節可能會發生變化。

4)對象的模式和/或語義可能會在后續的beta測試版或穩定版中以不兼容的方式進行更改。 發生這種情況時,我們將提供遷移到下一個版本的說明。 這可能需要刪除、編輯和重新創建API對象。執行編輯操作時需要謹慎行事,這可能需要停用依賴該功能的應用程序。

5)建議僅用於非業務關鍵型用途,因為后續版本中可能存在不兼容的更改。 如果有多個可以獨立升級的集群,則可以放寬此限制。

 

stable-穩定版本:

1)版本名稱是vX,其中X是整數。

2)功能的穩定版本將出現在許多后續版本的發行軟件中。

 

API組

為了更容易地擴展Kubernetes API,我們實現了API組。 API組在REST路徑和序列化對象的apiVersion字段中指定。目前有幾個API組正在使用中:

  1. 核心組(通常被稱為遺留組)位於REST路徑/api/v1並使用apiVersion:v1

2)指定的組位於REST路徑/apis/$GROUP_NAME/$VERSION,並使用apiVersion:$GROUP_NAME/$VERSION(例如apiVersion:batch/v1)。在Kubernetes API參考中可以看到支持的API組的完整列表。

社區支持使用以下兩種方式來提供自定義資源對API進行擴展自定義資源

1)CustomResourceDefinition適用於具有非常基本的CRUD需求的用戶。

2)需要全套Kubernetes API語義的用戶可以實現自己的apiserver,並使用聚合器為客戶提供無縫的服務。


免責聲明!

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



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