Kubernetes 支援 OpenAPI 的新功能
Open API 讓 API 提供者可以定義自己的操作和模型,並讓開發者可以自動化的生成喜歡語言的客戶端,用以和 API 伺服器通訊。Kubernetes 已經支援 Swagger 1.2(OpenAPI 規範的前身)有一段時間了,但是這一標準不夠完整和有效,憑藉這一支援,非常難生成工具或客戶端。 |
在 Kubernetes 1.4,我們對目前的模型和操作進行了升級,引入了 Open API 規範(在沒被捐獻給 Open API 之前被稱作 Swagger 2.0)支援的 Alpha 版本。從 Kubernetes 1.5 開始,OpenAPI 規範的支援已經完備,能夠直接從 Kubernetes 原始碼生成規範,對於模型和方法的任何變更,都會保障文件和規範的完全同步。
新規範讓我們有了更好的 API 文件,甚至還有了一個 Python 客戶端。
這一模組化的規範用 GroupVersion 進行分隔,這一做法屬於未雨綢繆,我們想要讓不同的 API Server 使用不同的 GroupVersion。
規範的結構在 Open API spec definition 中有解釋。我們用 operation 標記 來拆分每個 GroupVersion 並儘可能的豐富其中的模型、路徑、操作等資訊。操作的引數、呼叫方法以及響應都有文件描述。
例如,獲取 Pod 資訊的 OpenAPI 規範
{ ... "paths": { "/api/v1/namespaces/{namespace}/pods/{name}": { "get": { "description": "read the specified Pod", "consumes": [ "*/*" ], "produces": [ "application/json", "application/yaml", "application/vnd.kubernetes.protobuf" ], "schemes": [ "https" ], "tags": [ "core_v1" ], "operationId": "readCoreV1NamespacedPod", "parameters": [ { "uniqueItems": true, "type": "boolean", "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", "name": "exact", "in": "query" }, { "uniqueItems": true, "type": "boolean", "description": "Should this value be exported. Export strips fields that a user can not specify.", "name": "export", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/v1.Pod" } }, "401": { "description": "Unauthorized" } } }, … } …
有了這些資訊,以及 kube-apiserver 的 URL,就可以據此來呼叫介面了(/api/v1/namespaces/{namespace}/pods/{name}),引數包括 name、exact 以及 export 等,呼叫結果會返回 Pod 資訊。客戶庫生成器也會使用這些資訊來建立一個 API 函式呼叫來讀取 Pod 資訊。例如 Python 客戶端 能夠很簡單的進行如下呼叫:
from kubernetes import client ret = client.CoreV1Api().read_namespaced_pod(name="pods_name", namespace="default")
一個簡化版的 read_namespaced_pod;Python Client:https://github.com/kubernetes-incubator/client-python還可以使用 Swagger-codegen 文件生成器來根據這些資訊生成文件:
GET /api/v1/namespaces/{namespace}/pods/{name} (readCoreV1NamespacedPod) read the specified Pod Path parameters name (required) Path Parameter — name of the Pod namespace (required) Path Parameter — object name and auth scope, such as for teams and projects Consumes This API call consumes the following media types via the Content-Type request header: */* Query parameters pretty (optional) Query Parameter — If 'true', then the output is pretty printed. exact (optional) Query Parameter — Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. export (optional) Query Parameter — Should this value be exported. Export strips fields that a user can not specify. Return type v1.Pod Produces This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header. application/json application/yaml application/vnd.kubernetes.protobuf Responses 200 OK v1.Pod 401 Unauthorized
從 kube-apiserver/swagger.json。這個檔案會包含所有啟用的 GroupVersion 方法和模型,其中的內容會是該 API Server 所對應的最新版本。
Kubernetes 的 Github 倉庫,可以訪問 master 或者其他指定的 Release。
有很多工具 能和這些 API 協同工作,例如可以用 swagger editor 來開啟規範檔案並渲染文件,或者生成客戶端;還可以直接利用 swagger codegen 來生成文件和客戶端。自動生成的客戶端多數時候是開箱即用的。不過可能需要做一些登入和 Kubernetes 相關的設定。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2642448/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes官方java客戶端之六:OpenAPI基本操作Java客戶端API
- OpenAPI Generator,根據Swagger/OpenAPI生成程式碼的工具APISwagger
- 擁抱 OpenAPI 3:springdoc-openapi 食用指南APISpring
- OpenAPI Basic StructureAPIStruct
- OpenAPI definition(示例)API
- 詳細介紹:Kubernetes1.4版本的新功能
- SAP雲平臺對Kubernetes的支援
- Kubernetes 1.24 將結束對 dockershim 的支援Docker
- OpenAPI規範簡介API
- OpenAPI規範入門API
- 部署一個支援Dapr 的Kubernetes APISIX IngressAPI
- [新功能]ECSAPI支援批量建立包年包月雲伺服器API伺服器
- OpenAPI 3.0 規範-食用指南API
- .Net介面版本管理與OpenApiAPI
- CNCF網路研討會:Kubernetes 1.13的新功能(視訊+幻燈片)
- 雲伺服器ECS使用OpenAPI管理ECS:使用OpenAPI彈性建立ECS例項伺服器API
- SAP 電商雲 Spartacus UI 支援延遲載入的新功能的入口設計UI
- 雲原生週刊:Kubernetes 1.30 的一切新功能 | 2024.4.1
- Laravel 5.5 支援包自動發現(新功能早知道)Laravel
- Collections 支援 dd 跟 dump 啦!( Laravel 5.5 新功能早知道)Laravel
- 正式釋出!Azure Functions OpenAPI ExtensionFunctionAPI
- 部落格園OpenApi管理平臺API
- 向 Kubernetes 低頭?Mesosphere 新增 Kubernetes 支援|航海日誌 Vol.27
- Swagger/OpenAPI Client Generator for Delphi and FPCSwaggerAPIclient
- MIUI 7.5新功能曝光 MIUI 7.5支援哪些機型彙總UI
- 在 Kubernetes Ingress 中支援 Websocket/Socket 服務Web
- Kubernetes1.6新特性:全面支援多顆GPUGPU
- Open API Initiative釋出OpenAPI規範3.0.0API
- OpenAPI自定義生成器詳細教程API
- Laravel 5.5 郵件支援多主題啦!(Laravel 5.5 新功能早知道)Laravel
- Nodejs 的新功能NodeJS
- Google釋出VS Code,支援Kubernetes應用開發Go
- kubernetes1.5新特性(二):支援Photon卷外掛
- Apizza 已經更新了很多新功能,感謝 Laravel 社群小夥伴的支援和建議^_^APILaravel
- 驗證器支援返回請求資料咯!(Laravel 5.5 新功能早知道)Laravel
- Knife4j輕鬆聚合雲端OpenAPI文件API
- 如何實現 OpenAPI 多語言 SDK 開發?API
- 使用OpenApi彈性管理雲伺服器ECSAPI伺服器